什么是遞回?用Java寫一個簡單的遞回程式
遞回的定義
遞回(recursion):以此類推是遞回的基本思想,將規模大的問題轉化為規模小的問題來解決,
遞回的要素
- 自定義遞回函式,并確定函式的基本功能
例如Java從鍵盤輸入一個數,求輸入這個數的階乘,這個時候把輸入的數字作為形參
int diGuiTest(int n ){
}
- 找到遞回函式回圈結束條件
在求階乘的時候,我們不妨做出如下思考,例如輸入的n是5,那么5!是5 * 4 3 * 2 * 1,那是不是可以寫成
n f(n-1)?,程式運行程序如下:
5* f(4)
f(4)相當于重新呼叫了函式,形參為4
5 * 4* f(n-1)
f(3)相當于重新呼叫了函式,形參為3
5 * 4* 3* f(n-1)
f(2)相當于重新呼叫了函式,形參為2
5 * 4* 3 * 2* f(n-1)
f(1)相當于重新呼叫了函式,形參為1
很容易發現,這時候如果遞回呼叫到n為1的時候,就要結束呼叫自身
代碼如下:
int diGuiTest(int n ){
if(n==1){
return 1;
}
else{
return n*f(n-1);
}
}
代碼示例
- 求1–100之間所有自然數的和
int sum (int n ){
if(n==1){
return 1 ;
}
else{
return n+sum(n-1);
}
}
- 斐波拉契數列
斐波那契數列(Fibonacci sequence),又稱黃金分割數列,因數學家萊昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2) (n ≥ 2,n ∈ N*)
int fibonacci(int n ){
if (n<=1){
return n;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
}
}
- 漢諾塔問題

首先我們考慮最簡單的情況:

將最上面的一塊放到B,再將最下面一塊放到C,再把最上面一塊從B放到C即可

public class Hanio {
public static void main(String[] args) {
char A='A';
char B='B';
char C='C';
hannio(3,A,B,C);
}
static void hannio(int paltfrom,char A,char B, char C){
if (paltfrom==1){
move (A,C);
}else {
hannio(paltfrom-1,A,C,B);//上面兩個盤子,通過C柱到B柱
move (A,C);
hannio(paltfrom-1,B,A,C);//
}
}
static void move(char A,char B){
System.out.println(A+"---->"+B);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/260568.html
標籤:java
上一篇:Spring AOP原始碼(5)—DefaultAdvisorAutoProxyCreator自動代理創建者
下一篇:ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal三者之間區別
