Java中的不死神兔(斐波那契數列)
阿新 • • 發佈:2018-11-11
三種方法實現例項:
package test17_digui;
import java.util.Scanner;
/*
* 題目:有一對兔子,從出生後第3個月起每個月都生1對兔子,小兔子第三個月後也可以生一對兔子,
* 假如兔子不死,在指定月份時刻一共可以有多少對兔子
*
* 分析:
* 第一個月:1
* 第二個月:1
* 第三個月:2
* 第四個月:3
* 第五個月:5
* 第六個月:8
* 。。。。。
*
* 其實指定月份兔子的總數為此月之前兩個月兔子總數之和。
*
* 實現3種方法
* 1、陣列實現
* 2、相鄰變數實現
* 3、遞迴實現
*/
public class DiGuiDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請輸入當前月份");
int m=sc.nextInt();
int n1=0;
int n2=0;
int n3=0;
sc.close();
//陣列實現
if(m<=2) {
n1=1;
}else {
int []x=new int[m];
x[0]=1;
x[1]=1;
for (int i=2;i<m;i++ ) {
x[i]=x[i-1]+x[i-2];
}
n1=x[m-1];
}
System.out.println("方法一:陣列實現");
System.out.println("\t"+"第"+m+"月份共有"+n1+"對兔子");
System.out.println("--------------------------");
//相鄰變數實現
if(m<=2) {
n2=1;
}else {
int a=1;
int b=1;
int temp= 0;
for(int i=0;i<m-2;i++) {
temp=a;
a=b;
b=temp+b;
}
n2=b;
}
System.out.println("方法二:相鄰變數實現");
System.out.println("\t"+"第"+m+"月份共有"+n2+"對兔子");
System.out.println("--------------------------");
//遞迴實現
n3=digui(m);
System.out.println("方法三:遞迴實現");
System.out.println("\t"+"第"+m+"月份共有"+n3+"對兔子");
}
private static int digui(int m) {
// TODO Auto-generated method stub
if(m<=2) {
return 1;
}else {
return digui(m-1)+digui(m-2);
}
}
}
輸出結果:
注:
1、遞迴次數不要太多,太佔記憶體
2、遞迴一定要有出口