斐波那契數列遞迴與非遞迴
斐波那契數列的表示式:
Fibonacci數列簡介:
F(1)=1
F(2)=1
F(n)=F(n-1)+F(n-2) (n>2)
遞迴演算法程式:
int f(int n)
{
if (n == 1 || n == 2)
return 1;
else
return f(n - 1) +f(n - 2);
}
時間複雜度為:
分析:T(n+1)=T(n)+T(n-1)=2*T(n-1)+T(n-2)=…=F(n)+F(n-1)=F(n+1)
由於直接遞迴呼叫,結果中的每一個1都來自最底層的F(1)和F(2),那麼為了求第n個數,就要呼叫F(n)次函式.由於斐波那契數列是指數增長,所以該演算法的時間複雜度也是指數增長,即O(2^n)
非遞迴演算法:
int F2(int n)
{
int[] a = new int[n];
a[0] = 1;
a[1] = 1;
for (int i = 2; i < n; i++)
{
a[i] = a[i - 1] + a[i - 2];
}
return a[n - 1];
}
時間複雜度為O(n)
相關推薦
斐波那契數列的python實現(遞迴與list實現)
斐波那契數列概念 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……
斐波那契數列(一)--對比遞迴與動態規劃(JAVA)
兔子繁殖問題: 這是一個有趣的古典數學問題,著名義大利數學家Fibonacci曾提出一個問題:有一對小兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。按此規律,假設沒有兔子死亡,第一個月有一對剛出生的小兔子,問第n個月有多少
Python學習--斐波那契數列--迭代法和遞迴法實現
斐波那契數列實現的兩種方式 迭代法: 使用迭代法速度快,運算幾乎不用等待,例如計算99代,可以瞬間出答案,效率比遞迴法快,但是程式冗雜。 def fib(n): n1 = 1 n2 = 1 n3 = 1 if n < 1:
斐波那契數列3種解法(樸素遞迴、動態規劃、數學歸納)及演算法分析
本文來自網易公開課的<演算法導論>第3講分治法。讓我對分治法的使用有了一個新的認識斐波那契數列,又稱黃金分割數列,F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) 下面我將使用Java(是的,又是Java,不過我覺得沒什麼問題,演
python實現斐波那契數列:迭代和遞迴對比
迭代和遞迴 從概念上講,遞迴就是指程式呼叫自身的程式設計思想,即一個函式呼叫本身;迭代是利用已知的變數值,根據遞推公式不斷演進得到變數新值得程式設計思想。 對於剛入門的程式設計小白而言,對遞迴的理解應該是要難於對迭代的理解的。下面將以python實現斐波那契
【矩陣乘法x2】LuoGu P1349 廣義斐波那契數列&&LNSYOJ#395遞推式字首和
這是兩道矩陣的水題 題目描述 數列f[n]=f[n-1]+f[n-2]+n+1,f[1]=f[2]=1的前n項和s[n]=f[1]+f[2]+……+f[n]的快速求法(答案取模10e9+7) 輸入格式 一個整數bb。 輸出格式 一個整數字首和。
斐波那契數列C++語言與C語言實現
斐波那契數列C++與C分別實現 介紹: 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、
斐波那契數列(遞迴與非遞迴)
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 1e2+10; ll a[MAXN]; ll F[MAXN]; ll f(ll n) ///遞迴 { if
Java中的組織形式、類與物件、靜態的static關鍵字、最終的final關鍵字、方法傳參方式、遞迴(階乘、斐波那契數列、漢諾塔)
Java程式的組織形式 Java程式需要把程式碼以類的形式組織起來,然後被Java編譯器編譯,再被JVM執行。Java程式是以類的結構為基礎的。 Java程式的基本要素 識別符號 識別符號命名規範 關鍵字(保留字) 關鍵字(保留字)具有專門的意義和用途
斐波那契數列的遞迴與迴圈實現及複雜度分析
一、斐波那契數列的定義: 二 、遞迴實現: 經典例題(杭電2041): AC程式碼: #include <iostream> using namespace std; int f[41]; int main() { int num,m;
斐波那契數列的遞迴與非遞迴的實現
0,1,1,2,3,5,8…這樣的數列稱作斐波那契數列 1、遞迴實現方式 //斐波那契數列遞迴實現 long long Fib1(long long n) { if (n<=1) retur
斐波那契數列(Fibonacci)遞迴與非遞迴的效能對比
費波那契數列由0和1開始,之後的數就由之前的兩數相加 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584,………. 遞迴演算法 用遞迴演算法來求值,非常好理解.虛擬碼: f(n) =
斐波那契數列的迭代實現與遞迴實現(c語言)
遞迴實現 #include<stdio.h> int Fib(int n){ // 自定義函式 if(n<0) return -1; else if(n==0) return 0; else if(n==1)
斐波那契數列--遞迴與非遞迴實現
初識斐波那契數列: 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子
斐波那契數列遞迴與非遞迴實現(JAVA語言描述)
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34
斐波那契數列遞迴與非遞迴
斐波那契數列的表示式: Fibonacci數列簡介: F(1)=1 F(2)=1 F(n)=F(n-1)+F(n-2) (n>2) 遞迴演算法程式: int f(int n) { if (n == 1 || n == 2) return 1; els
【C++】斐波那契數列前N項的和遞迴與非遞迴演算法
定義:斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、1、1、2、3、5、8、1
斐波那契數列(遞迴與非遞迴)
首先來說下遞迴,遞迴的思想是大事化小。斐波那契數列:1,1,2,3,5,8,13,21........設f(n)是第n個斐波那契數,當n<=2,斐波那契數都為1;當n>2,那麼第f(n)個斐波那契數就等於前兩個斐波那契數之和。遞迴的程式碼實現:#include&l
JAVA 遞迴與非遞迴斐波那契數列的實現
今天練習時碰到斐波那契數列,迴圈和遞迴的程式碼分別統計了一下執行時間。遞迴還是相當慢的。找了一篇介紹比較詳細的博文,閒暇時可以再看看。 連結package exrcise; public class Demo1 { public static void main(Str
斐波那契數列(遞迴與迭代)
int Fbi(int i)/*這裡Fbi就是函式自己,等於在呼叫自己*/ { if(i<2) return i==0?0:1; return Fbi(i-1)+Fbi(i-2); } int main() { int i; int a[40]; printf("迭代顯示斐波那契數列:\