1. 程式人生 > >Java中的不死神兔(斐波那契數列)

Java中的不死神兔(斐波那契數列)

三種方法實現例項:

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、遞迴一定要有出口