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));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM