c語言中遞迴函式真的好嗎?

2021-07-08 17:13:56 字數 1108 閱讀 9985

遞迴函式就是直接或者間接的呼叫自己本身的函式。

接觸遞迴的時候我們經常會看到這個程式

#include#includelong factorial(int n)

int main()

這就是計算階乘的乙個遞迴函式!!但是它真的好嗎?答案是  no!這個程式的執行效率非常低,因為每次呼叫函式時的開銷很大,不停的呼叫factorial()函式就要在堆疊上開闢空間(大多數編譯器都是在堆疊上完成遞迴的),這樣的函式寫出來的確是不好的!而下面這個程式也完成上面的結果:

#include#includelong factorial(int n)

return result;

}int main()

完成5的階乘,但是效率確高的多,這裡只用到乙個迴圈。

#include#includelong fibonacci(int n)

int main()

求出斐波那契數列中的第五個數,每次求值時都會使用前面的值,每乙個呼叫都會出發兩個遞迴呼叫,額外的開銷非常大。但是用迭代方法實現卻是很方便:

#include#include//計算fibonacci

long fibonacci(int n)

return result;

}int main()

這個迭代的過程是這樣的:

因為fibonacci數列的後一位是前兩位的和

second        first        result

1               1             2 

1               2             3

2               3             5

3               5             8

這個效率遠高於遞迴。

看來遞迴實現乙個問題並不是所有的都是好的,所以在遇到乙個問題時如果你想到了遞迴,那麼你首先應該想一下這樣的遞迴的好處能否抵上完成它所付出的代價!

本文出自 「aiali」 部落格,請務必保留此出處

C語言中遞迴詳解

編寫乙個簡單的cheng函式,輸入的b全為數值5。第一種情況 1 include2 int cheng int a 3 10 return a 11 12 13 int main 14這種情況會輸出 2624 120120為什麼會產生這樣的結果?首先我們要明白,函式在未完成自己的計算之前,是無法被呼...

C語言中的遞迴

遞迴就是乙個函式在它的函式體內呼叫它自身。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。直到某一條件跳出!例1 計算5的階乘 例2 include 定義獲取單詞數量的函式 int getwordnumber int n else int main 例3 猴子第一天摘下n個桃子,當時就吃了一...

c語言函式 遞迴

函式的遞迴可以簡單的理解為迴圈,但他和迴圈是不一樣的。函式的一次遞迴呼叫相當於一次迴圈。一般情況下,迴圈要比遞迴計算的時間要快一些 函式的遞迴是在函式內呼叫自己,滿足限制條件後,就會返回到上乙個函式,知道返回到最初的函式 遞迴的呼叫條件 1 限制條件 滿足這個條件,遞迴將不再進行。2 每次的遞迴呼叫...