方法1:
直接遞迴,呼叫button1_click函式,當n為41時耗時10644ms,遞迴呼叫次數count = 535828591(5億),已經沒有信心再增加n的值了。
效率低的原因是每次求n的結果時都會重新計算n-1和n-2的結果,導致大量的重複計算,由count的值可知。
方法2:
用一字典儲存每次計算後的第n項的值,下次需要時直接取,不需重複計算。
當n=41時耗時1ms以下,遞迴次數81,即便n=150時耗時也在1ms以下。
結論:在遞迴演算法時,考慮暫存結果減少遞迴呼叫次數能極大提高運算效率。
以下是主要**:
private dictionarydict = new dictionary();
private long count;
private long fibonacci1(long n)
private long fibonacci2(long n)
private void button1_click(object sender, eventargs e)
private void button2_click(object sender, eventargs e)
斐波那契 Fibonacci 數列
實踐證明,尾遞迴 確實比普通遞迴效率高。下面的例子 用 普通遞迴需要10s完成 而用尾遞迴,只用了1s不到 package com.zf.dg 題目 有一種母牛,出生後第三年,開始生育,每年都生一頭 母牛 貌似單性生育,這裡就沒公牛什麼事兒 生出來的小母牛也符合同樣的規律,出生後第三年,開始生 育,...
Fibonacci 斐波那契數列
一 介紹 在數學上,費波那契數列是以遞迴的方法來定義 0 f 0 1 f 1 f f f f f n 2 用文字來說,就是費波那契數列由0和1開始,之後的費波那契係數就是由之前的兩數相加而得出。首幾個費波那契係數是 0,1,1,2,3,5,8,13,21,34,55,89,144,233 oeis中...
斐波那契數列(Fibonacci)
斐波那契數列 無窮數列 1,1,2,3,5,8,13,21,34,55.稱為fibonacci數列。它可以定規地定義為 n 0,1 f n 1 n 1 f n f n 1 f n 2 這是乙個遞迴的關係式,它說明當n大於1時,這個數列的第n項的值,是它前面兩項的和,它用兩個較小的自變數的函式值來定義...