Java中的遞歸以及不死神兔實例(斐波那契數列)


遞歸
1、遞歸次數不要太多,太占內存
2、遞歸一定要有出口
3、構造方法不能遞歸使用
三種方法實現實例:

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);
		}
		
	}

}



12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091

輸出結果:
在這里插入圖片描述




轉載自:https://blog.csdn.net/zfliu96/article/details/83931876


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM