一個方法體內呼叫它自身,就稱為遞迴方法。方法遞迴包含了一種隱式的迴圈,它會重複執行某段程式碼,但這種重複執行無須迴圈控制。
要使用遞迴,必須要有兩個條件:
- 遞迴終止條件,不然會陷入死迴圈
- 遞迴表示式,即找出規律
下面,給出幾道關於遞迴的演算法題,來領悟遞迴的神奇。
1.求1~n的階乘
一般思路,是用for迴圈來求解,不過我們這裡用遞迴來做。
//求1~n的階乘
public static int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n - 1);
}
2.斐波那契數列(Fibonacci sequence)
斐波那契數列的是這樣一個數列:1、1、2、3、5、8、13、21、34....,即第一項 f(1) = 1,第二項 f(2) = 1.....,第 n 專案為 f(n) = f(n-1) + f(n-2)。求第 n(n>=1) 項的值是多少。
public static int fibonacci(int n) {
if (n == 1) {
return 1;
} else if (n == 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
3.小青蛙跳臺階
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n(n>=1)級的臺階總共有多少種跳法。
public static int frogJump(int n) {
if (n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else {
return frogJump(n - 1) + frogJump(n - 2);
}
}