前言:遞歸(recursion):遞歸滿足2個條件 1)有反復執行的過程(調用自身) 2)有跳出反復執行過程的條件(遞歸出口) 第一題:漢諾塔

對於這個漢諾塔問題,在寫遞歸時,我們只需要確定兩個條件: 1.遞歸何時結束? 2.遞歸的核心公式是什么?即: 怎樣將n個盤子全部移動到C柱上? 即:若使n個盤子全部移動到C柱上,上一步應該做什么? 代碼實現 package diguui; public class digui1 { public static void hanoi(int n,int p1,int p2,int p3) { if(1==n) System.out.println("盤子從"+p1+"移到"+p3); else { hanoi(n-1,p1,p3,p2); System.out.println("盤子從"+p1+"移到"+p3); hanoi(n-1,p2,p1,p3); } } public static void main(String[] args) { /*4表示盤數,1表示開始柱子,2表示開始柱子,3表示開始柱子*/ hanoi( 4, 1, 2, 3); } } 效果圖

第二題:一般而言,兔子在出生兩個月后,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那么一年以后可以繁殖多少對兔子? 分析如下: 第一個月小兔子沒有繁殖能力,所以還是一對; 兩個月后,生下一對小兔子,總數共有兩對; 三個月以后,老兔子又生下一對,因為小兔子還沒有繁殖能力,總數共是三對; …… 依次類推可以列出下表:

可以得出: 斐波納契數列,又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、…… 這個數列從第三項開始,每一項都等於前兩項之和。 package diguui; public class digui1 { public static int fun(int m){ if(m<2){ return 1; }else{ return fun(m - 1)+fun(m-2); } } public static void main(String[] args) { System.out.println(fun(12)); } }