斐波那契數列

  其實這個斐波那契數列比較簡單,但是這裏還是要寫一下,主要是弄懂遞歸和遞推的區別。以及在一些情況下爲什麼遞歸比遞推慢。

  下面就分別用遞歸和遞推來實現斐波那契數列。

public class demo1 
{
	//這裏是遞推的方法。
	public static int fib(int n)
	{
		//int fib[];//數組只是聲明一個引用變量,不能直接使用,還要初始化
		int fib[]=new int[50];//初始化後可以定義長度
		fib[0]=1;
		fib[1]=1;		
		for(int i=2;i<=n;i++)
		{
			fib[i]=fib[i-1]+fib[i-2];
		}
		return fib[n];
	}
	//這裏用的是遞歸
	public static int fib1(int n){
		if(n<=1) return 1;
		return fib(n-1)+fib(n-2);	
	}
	
	public static void main (String[] args)
	{
		int n=3;
		System.out.print(fib1(n));
		System.out.print(fib(n));
	}
	

}

  

  下面就講一講遞推和遞推的區別。粘貼一些別處的文段。    

  區別程序調用自身的編程技巧稱爲遞歸。遞歸做爲一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型複雜的問題層層轉化爲一個與原問題相似的規模較小的問題來求解。遞歸策略只需少量的程序就可描述出解題過程所需要的多次重複計算,大大地減少了程序的代碼量。

  遞推算法是一種用若干步可重複的簡運算(規律)來描述複雜問題的方法。遞推是序列計算機中的一種常用算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定象的值。迭代是重複反饋過程的活動,其目的通常是爲了逼近所需目標或結果。每一次對過程的重複稱爲一次“迭代”,而每一次迭代得到的結果會作爲下一次迭代的初始值。

  下面回到斐波那契數列,這裏遞歸沒有遞推快的原因我的想法是這樣的:可能遞推用到了前一次的計算結果,但是遞歸是倒着來的,沒有用到前面的緩存。所以遞推一般比遞歸要快。

發佈了41 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章