js 中利用遞迴求階乘及斐波那契
阿新 • • 發佈:2019-02-13
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> </body> </html> <script> /* 遞迴: 函式自己呼叫自己 停不下來 需要有 跳出的條件 /* 使用遞迴 求和 1 到 n 的和 假設 我們 已經封裝好了一個函式 fn 首先找規律 n=1: 1 n=2: 1+2 ->fn(1)+2 n=3: 1+2+3 -->fn(2)+3 n=4: 1+2+3+4 -->fn(3)+4 -> fn(2)+3+4 -> fn(1)+2+3+4->1+2+3+4 .. n: 1+2+3...+n --> fn(n-1)+n */ function fn(n) { if (n == 1) { return 1; } return fn(n - 1) + n; } var result = fn(4); console.log(result); /* 使用遞迴 求n的階乘 假設 寫好了一個函式 fn 1:1 2:1*2 ->fn(1)*2 3:1*2*3 ->fn(2)*3 4:1*2*3*4 ->fn(3)*4 ... n:1*2*3...*n ->fn(n-1)*n */ function fn2(n) { // 條件是 if(n==1){ return 1; } return fn2(n - 1) * n; } var result2 = fn2(4); console.log(result2); /* 斐波那契數列 封裝好了 函式fn 十分耗費效能 因為函式成 指數倍 增長 每一個新的函式 都需要耗費 系統的資源 每一次化簡 都需要化到 最底部 1,2 才能夠求和 1:1 fn(1) ->1 2:1 fn(2) ->1 3:2 fn(2)+fn(1) 4:3 fn(3)+fn(2) 5:5 6:8 .... n: fn(n-1)+fn(n-2) */ function fn4(n) { if (n == 1 || n == 2) { return 1; } return fn4(n - 1) + fn4(n - 2); } var result = fn4(20); console.log(result); </script>