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