分析:遞迴的思想,舉個例子吧!!!電影院看電影院,當你去晚了,然後從最後一排問,你是第幾排,一直問到第一排,然後第一排的人又以相同的方式傳回來,重複做相同的工作,先去傳遞「你是第幾排」這個問題,然後回歸給自己「我是第幾排」,得到結果。自己呼叫自己,會出現無限迴圈的問題(死迴圈),所以必須有跳出,結束條件,才能有結果。
先傳遞,後回歸。必須有跳出才有結果。自己呼叫自己。
找規律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)
console.log(fn(5));
1.利用遞迴求1-100的和分析://分析
// 100 + fn(99);
// 99 + fn(98);
//實現
function sum(n)
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)
return fn(n-1) + fn(n-2);
}console.log(fn(8));
3.求最大公約數(輾轉相除法(計算過程為:兩個數相除得到餘數,餘數不為0時,讓兩個數中的最小數與餘數在相除,直到餘數為0時,那個最小數就為它們的最大公約數))
function fn(m,n)else
}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)
return 1 / n + fn(n-2);
}console.log(fn(10));
基礎 遞迴練習
1 有乙個農場在第一年的時候買了一頭剛出生牛,這頭牛在第四年的時候就能生一頭小牛,以後每年這頭牛就會生一頭小牛。這些小牛成長到第四牛又會生小牛,以後每年同樣會生一頭牛,假設牛不死,如此反覆。請問50年後,這個農場會有多少頭牛?首先定義最終終止條件f 4 1 然後定義遞迴公式中f n f n 1 f ...
遞迴練習答案
演算法 4.1 4.2 4.3 請編寫前述sum函式的 def sum list if list return 0 return list 0 sum list 1 print sum 4,5,6,7 編寫乙個遞迴函式來計算列表包含的元素數 def count list if list return...
python遞迴練習
1 漢諾塔問題 複雜度 f n f n 1 1 f n 1 n層 2 n 1步def func n,fromm,to,help if n 1 print move str 1 from fromm to to base case else func n 1,fromm,help,to 將n 1層從f...