關於遞迴的效能問題

2021-04-01 18:27:59 字數 477 閱讀 2176

一直以為遞迴比較方便,也知道遞迴相對於堆疊實現會有一些效能方面的問題,一直沒引起重視,但今天測試了乙個例項,結果真的很嚇人,看來以後在這方面一定要多多注意了。

問題的提出,題目:已知數列:1,1,2,3,5,8,13,21,34,..... 求第50個數值? 並用c#寫出演算法?

一看就知道是菲波那契數列,用簡單的遞迴就可以實現。實現**如下:

private long fib(int num)  

else

}結果就測試了一下fib(50)的值為12586269025 ,用的時間是total milliseconds:405906.25,哇,人都等老了!

接著想用堆疊實現不用那麼多次回溯,應該會快一點,於是就寫了一下(實際上,根本不需要用到堆疊,只需要用一些中間變數儲存中間結果即可)

private long fib(int num)

else

return s;}}

結果用了0s。

遞迴可能出現的效能問題

遞迴演算法的 很簡潔。但同時也存在缺點。遞迴由於函式要呼叫自身,而函式呼叫是有時間和空間的消耗的。每一次函式呼叫,都需要在記憶體棧中分配空間以儲存引數 返回位址及臨時變數,而且往棧裡壓入資料和彈出資料都需要時間。遞迴有可能很多計算都是重複的,從而對效能帶來很大的負面影響。遞迴的本質是把乙個問題分解成...

mysql 遞迴 效能 漫談遞迴 遞迴的效率問題

遞迴在解決某些問題的時候使得我們思考的方式得以簡化,也更加精煉,容易閱讀。那麼既然遞迴有這麼多的優點,我們是不是什麼問題都要用遞迴來解決呢?難道遞迴就沒有缺點嗎?今天我們就來討論一下遞迴的不足之處。談到遞迴就不得不面對它的效率問題。為什麼遞迴是低效的 還是拿斐波那契 fibonacci 數列來做例子...

關於遞迴 return none的問題

str1 raw input enter a string print len str1 defremovespace str1 str2 if str1 0 and str1 1 return str1 elif str1 0 if str1 1 str2 str1 1 1 return remo...