1. 程式人生 > >裴波那契數列(迴圈實現遞迴)

裴波那契數列(迴圈實現遞迴)

裴波那契(Fibonacci)數列
f(n)=

0,1,f(n1)+f(n2),n =0n =1n>1

求裴波那契數列的第n項。(題目來自劍指offer)
1.遞迴解法,效率很低的解法,不用
一看到這個題,我們就很容易竊喜的想到這種解法
很多f(i)進行了重複計算,隨著n的增大,計算量急劇增加,時間複雜度以n的指數方式遞增,存在很嚴重的效率問題。

 int Fibonacci(int n) {
        if(n<=0)   return 0;
        if(n==1)   return 1;
        return Fibonacci(n-1)+Fibonacci(n-2
); }

2.用迴圈實現遞迴,面試官期待的解法(O(n))
方法1中的遞迴程式碼之所以慢是因為重複計算的太多,我們只要想辦法避免重複就行了。可以把已經得到的數列中間項儲存起來,如果下次需要的時候先查詢一下,如果前面已經計算過了就不用再重複計算了。

int Fibonacci(int n) {
        if(n<=0)   return 0;
        if(n==1)   return 1;
        int a=1;
        int b=0;
        int fib=0;
        for(int i=2;i<=n;i++)
            {
            fib=a+b;
            b=a;
            a=fib;
        }
        return
fib; }

3.將求裴波那契數列轉換成矩陣的乘方
有創意,但程式碼複雜,不實用

相關推薦

數列迴圈實現

裴波那契(Fibonacci)數列 f(n)=⎧⎩⎨0,1,f(n−1)+f(n−2),n =0n =1n>1 求裴波那契數列的第n項。(題目來自劍指offer) 1.遞迴解法,效率很低的解法,不用 一看到這個題,我們就很容易竊喜的想到這種解法

數列不使用的快速演算法

void fabnacii(int n, int& fn) {if (n == 1){fn = 1;}else if (n == 2){fn = 1;}else if (n > 2){int* Fabnacci = new int[n];Fabnacci[0

劍指offer之斐數列Java實現

斐波那契數列 NowCoder 題目描述: 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 ###解題思路: 整體思路:考慮負數,大數,演算法的複雜度,空間的浪費 public class

劍指offer面試題10:斐數列Java 實現

題目:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。 思路:使用遞迴會重複計算,效率較低,可以用迴圈自下到上計算。 測試用例: 功能測試:輸入3、5、10 等。 邊界測試:輸入0、1、2 效能測試:輸入較大的數(如40、50、

Python 入門——數列Fibonacci Sequence

a,b=0,1while a<1000 #輸出不大於1000的數列       print(a, end=',')      a,b=b,a+b輸出結果:0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,>>&

JavaScript算法系列之-----------------斐數列JS實現

esc 算法 題目 要求 n-1 return 系列 斐波那契數列 通過 題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 遞歸實現: function Fibonacci(

不使用迭代法的斐數列兔子生兔子問題解決同時輸出兩個數字的問題

問題: 有一對兔子,生長三個月後。開始生第一對兔子,並且以後每月生一對兔子,小兔子生長三個月後,也開始生兔子,問N個月後兔子的總數量? 通用解法: 使用迭代法,此方法網上有n多版本,再次不再贅述。 不使用迭代法: 在不適用迭代法,而僅僅用for迴圈時,會出現一個問題

HDU 4549 M斐數列矩陣快速冪3+費馬小定理

C - M斐波那契數列 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB    

求第n個斐分別用和非兩種方法求解

斐波那契數列指的是這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55……這個數列從第3項開始,每一項都等於前兩項之和。 這裡分別用遞迴和非遞迴的方法實現: 遞迴 #define _CRT_SECURE_NO_WARNINGS 1 #include&l

實現數列js,以及複雜度降階

實現斐波那契數列(js),以及複雜度降階 背景——兔子數列 假設第1個月有1對剛誕生的兔子,第2個月進入成熟期,第3個月開始生育兔子,而1對成熟的兔子每個月會生1對兔子,兔子永遠不會死去……那麼,由1對兔子開始,12個月後會有多少對兔子呢? 問題分析: 我們拿新出生

Java實現數列、遍歷、矩陣

什麼是斐波那契數列 其實很簡單,可以理解為: F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*) 比如這樣一個數列:1、1、2、3、5、8、13、21、34、…… 有興趣可以看百度百科 下面我們就來實現,給定一個n,求f(n)的值

數列的python實現與list實現

斐波那契數列概念 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……

有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數為多少?數列

/** * @Desc:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子, * 假如兔子都不死,問每個月的兔子對數為多少? 程式分析: 兔子的規

PHP實現數列 + 非實現

斐波那契數列: 1 1 2 3 5 8 13 21 34 55 … 概念: 前兩個值都為1,該數列從第三位開始,每一位都是當前位前兩位的和 規律公式為: Fn = F(n-1) + F(n+1) F:指當前這個數列 n:指數列的下標 非遞迴寫

【C語言】斐數列的兩種演算法迴圈

#include<stdio.h> int Fabio(int n) //迴圈 { int i; int f1 = 1; int f2 = 1; int f3 = 1; for(i = 2;i<n;i++) { f3 = f1 + f

數列實現與非實現

斐波那契數列是數學家列昂納多·斐波那契(Leonardoda Fibonacci[1]  )以兔子繁殖為例子而引入,也稱為“兔子數列”。 指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、…… 在數學上,斐波納契數列以如下被以遞迴的方法定義:F(0)=0,F

數列 java實現

 public class Fibonacci {  public static void main(String[] args) {   for(int i=0;i<10;i++){    System.out.println(getfibonacci(i));

C語言編程實現數列歸與非

() code tdi clu return include 位置 c語言編程 數組 一.非遞歸 <1>數組 #include<stdio.h> #include<stdlib.h> int main() { int a[1000

[luoguP1962] 斐數列矩陣快速冪

truct ons 技術 pan opera http 快速冪 printf ble 傳送門 解析詳見julao博客連接 http://worldframe.top/2017/05/10/清單-數學方法-——-矩陣/ —&

hdu 4549 M斐數列矩陣高速冪,高速冪降冪

else if stdlib.h article 1.0 ostream void 我們 memset font http://acm.hdu.edu.cn/showproblem.php?pid=4549 f[0] = a^1*b^0%p,f[1] = a^0*b