目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:递归。(递归会使得操作树和图数据结构变得更简单。所以要理解递归。)(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之递归
一、递归基础应用 1、计算一个数的阶乘 1.1迭代阶乘(循环实现) 1 2 3 4 5 6 7 8 9 10 11 12 function factorialIterative (number ) { if (number < 0 ) { return undefined ; } let total = 1 ; for (let n = number; n > 1 ; n--) { total = total * n ; } return total; } console .log (factorialIterative (5 ));
1.2递归阶乘(使用递归时,要找到原始问题和子问题是什么。例如factorial(5)=5*factorial(4)) 1 2 3 4 5 6 7 8 9 function factorial (n ) { if (n === 1 || n === 0 ) { return 1 ; } return n * factorial (n - 1 ); } console .log (factorial (5 ));
2、斐波那契数列。(斐波那契数列是另一个可以用递归解决的问题。) 2.1迭代求斐波那契数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 function fibonacciIterative (n ) { let fibNMinus2 = 0 ; let fibNMinus1 = 1 ; let fibN = n; for (let i = 2 ; i <= n; i++) { fibN = fibNMinus1 + fibNMinus2; fibNMinus2 = fibNMinus1; fibNMinus1 = fibN; } return fibN; } console .log (fibonacciIterative (0 ));console .log (fibonacciIterative (1 ));console .log (fibonacciIterative (2 ));console .log (fibonacciIterative (3 ));console .log (fibonacciIterative (4 ));
2.2递归求斐波那契数 1 2 3 4 5 6 7 8 9 10 function fibonacci (n ) { if (n < 1 ) return 0 ; if (n <= 2 ) return 1 ; return fibonacci (n - 1 ) + fibonacci (n - 2 ); } console .log (fibonacciIterative (0 ));console .log (fibonacciIterative (1 ));console .log (fibonacciIterative (2 ));console .log (fibonacciIterative (3 ));console .log (fibonacciIterative (4 ));
2.3记忆化斐波那契数 //注:记忆化是一种保存前一个结果的值的优化技术,类似于缓存。
1 2 3 4 5 6 7 8 9 10 11 function fibonacciMemoization (n ) { const memo = [0 , 1 ]; const fibonacci = (n ) => { if (memo[n] != null ) return memo[n]; return memo[n] = fibonacci (n - 1 , memo) + fibonacci (n - 2 , memo); }; return fibonacci (n); } console .log (fibonacciMemoization (2 ));console .log (fibonacciMemoization (3 ));console .log (fibonacciMemoization (4 ));