遞迴及練習
阿新 • • 發佈:2019-09-01
遞迴:
先傳遞,後迴歸。必須有跳出才有結果。自己呼叫自己。
找規律
eg:
用遞迴算階乘 5的階乘 1 * 2 * 3 * 4 * 5
分析:
5! == 5 * 4!
4! == 4 * 3!
3! == 3 * 2!
2! == 2 * 1!
fn(5);
return 5 * fn(4);
fn(4)
return 4 * fn(3)
fn(3)
return 3 * fn(2)
fn(2)
return 2 * fn(1)
......
//實現
function fn(n){
if(n == 1) return 1;
return n * fn(n-1);
}
console.log(fn(5));
11.遞迴案例
1.利用遞迴求1-100的和
//分析
// 100 + fn(99);
// 99 + fn(98);
//實現
function sum(n){
if(n <= 1) return 1;
return n + sum(n-1);
}
console.log(sum(5));
2.兔子 3個月成年 ——> 繁殖
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987
//分析:
fn(n) = fn(n-1) + fn(n-2);
fn(10) = fn(9) + fn(8);
fn(9) = fn(8) + fn(7);
fn(8) = fn(7) + fn(6);
....
function fn(n){
if(n == 1 || n == 2){
return 1;
}
return fn(n-1) + fn(n-2);
}
console.log(fn(8));
3.求最大公約數(輾轉相除法(計算過程為:兩個數相除得到餘數,餘數不為0時,讓兩個數中的最小數與餘數在相除,直到餘數為0時,那個最小數就為它們的最大公約數))
function fn(m,n){
var r = m % n;
m = n;
n = r;
if(r == 0){
return m;
}else{
return fn(m,n);
}
}
console.log(fn(16,8));
4.編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+...+1/n,當輸入n為奇數時,呼叫函式求/1+1/3+...+1/n
分析:
10 1 / 10 + 1 / 8 + 1 / 6
11 1 / 11 + 1/ 9 + 1 / 7....
規律:1 / n + fn(n - 2);
實現:
function fn(n){
if(n == 1 || n == 2){
return 1/n;
}
return 1 / n + fn(n-2);
}
console.log(fn(1