--------遞歸在程序語言中簡單的理解是:方法自己調用自己
一、簡單遞歸
描敘
遞歸就是自己調用自己,不過需要注意的地方,需要給定跳出條件
代碼示例
/**
* 1、簡單遞歸
*/
public class test1 {
public static void main(String[] args) {
fa(100);
}
public static void fa(int i) {
if (i == 0) {
return;
}
System.out.println(i);
fa(i-1);
}
}
二、三角數字遞歸
描敘
什麼是三角數字
n個三角數字是 由 1+2+3…+n 所得值計算一個典型的三角數字。
- 1 的三角數字是1
- 2 的三角數字是 1+2 =3
- 3 的三角數字是 1 + 2 + 3 = 6
- 4 的三角數字是 1 + 2 + 3 + 4 = 10
下面通過代 計算 1+2+3…+n 所得值爲多少
代碼示例
package recursion;
/**
* 2、三角數字遞歸
* <p>
* 首先大家應該知道什麼是三角數字,三角數字的定義就是:
* 滴n個三角數字是 由 1+。。。+n所得。
* ........
* 例如:
* 1 的三角數字是1
* 2 的三角數字是 1+2 =3
* 3 的三角數字是 1 + 2 + 3 = 6
* 4 的三角數字是 1 + 2 + 3 + 4 = 10
* ..................................
* 公式= n= n+( n-1)
*/
public class test2 {
public static void main(String[] args) {
System.out.println("1 的三角數字是" + fa(1));
System.out.println("2 的三角數字是" + fa(2));
System.out.println("3 的三角數字是" + fa(3));
System.out.println("4 的三角數字是" + fa(4));
}
/**
* @param i
*/
public static int fa(int i) {
if (i == 1) {
return 1;
} else {
return i + fa(i - 1); // 4 + 3 + 2 + 1 ( 1 是 (i == 1) 處的 1 )
}
}
}
三、Fibonacci 樹列遞歸 ( 斐波那契數列)
描敘
斐波那契數列就是典型的樹列遞歸, 又名兔子數列 ,指的是這樣一個數列:0,1、1、2、3、5、8、13、21、34、……
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖爲例子而引入,故又稱爲“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,爲此,美國數學會從 1963 年起出版了以《斐波納契數列季刊》爲名的一份數學雜誌,用於專門刊載這方面的研究成果。
代碼示例
package recursion;
/**
* 3、Fibonacci 樹列遞歸 (斐波那契數列 = 兔子數列),指的是這樣一個數列:0,1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。
* <p>
* 兔子問題,已知: 有一對剛出生的兔子,兔子從出生後的第三個月起開始每月生出一對小兔子,生成的小兔子第三個月起也開始每月生小兔子,假如兔子不會死,問20個月後兔子總數?
* <p>
* 第一月 1 (1)
* 第二月 1
* 第三月 2 一月生 1 對( 1+ 1 = 2) --> 生出1對
* 第四月 3 一月生 1 對( 2+ 1 = 3) --> 生出1對
* 第五月 5 一月生 1 對,三月生 1 對 ( 3 + 1+ 1 = 3) --> 生出2對
* 第六月 8 一月生 1 對,三月生 1 對,四月生 1 對 ( 5+1+1+1 = 8) --> 生出3對
* 第七月 13 一月生 1 對,三月生 1 對,四月生 1 對,五月生 2對 ( 8+ 1+1+1 +2 = 13) --> 生出5對
* </p>
* 公式: 當前月數量 = 上1月 + 上2月 , 出生數量= 上2月
* <p>
* F0 = 0; F1 = 1; Fn = Fn-1 + Fn-2
*/
public class test3 {
public static void main(String[] args) {
//rabbit();
System.out.println(fib(24));
}
/**
* 使用遞歸
*/
public static int fib(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
// 公式: 當前月數量 = 上1月 + 上2月 , System.out.println("第 " + n + "月出生" + num + "對, 總數量" + num + ",");
return fib(n - 1) + fib(n - 2);
}
}
/**
* 使用循環
*/
public static void rabbit() {
System.out.println("第 1 個月兔子數 1 對");
System.out.println("第 2 個月兔子數 1 對");
int f1 = 1;
int f2 = 1;
int M = 24;
int x;
for (int i = 3; i <= M; i++) {
x = f2; // 上月總數
f2 = f1 + f2; // 本月總數 = 上月總數 + 上上月總數
f1 = x; // 把上月總數 定義成 下次循環的上上月總數
System.out.println("第 " + i + " 個月兔子數 " + f2 + " 對");
}
}
}
本文到此結束,如果覺得有用,勞煩各位點贊關注一下唄,將不定時持續更新更多的內容…,感謝大家的觀看!