函式的遞迴呼叫

2021-10-05 13:34:53 字數 924 閱讀 4599

程式呼叫自身的程式設計技巧成為遞迴,它可以將乙個大型複雜的問題層層分解成與原問題相似的小問題通過少量的**達到大事化小。

遞迴的兩個必要條件

1.存在限制條件,當滿足這個限制條件的時候,遞迴便不再繼續。

2.每次遞迴呼叫之後越來越接近這個限制條件。

//不建立臨時變數求字串長度

#include

#include

intstrlen

(const

char

*str)

intmain()

求菲波那切數列

#include

#include

intfib

(int n)

intmain()

在使用這個函式的時候會發現當n輸入大一點的數的時候會計算的很慢,當這個數特別大的時候甚至程式會因為棧溢位而崩潰。系統分配給程式的棧空間是有限的,但是如果出現了死迴圈,或者(死遞迴),這樣有可能導致一直開闢棧空間,最終產生棧空間耗盡的情況。

解決這個問題我們可以1.將遞迴寫成非遞迴2.使用static物件替代nonstatic區域性物件。在遞迴函式設計中,可以使用static物件替代nonstatic區域性物件(即棧對 象),這不僅可以減少每次遞迴呼叫和返回時產生和釋放nonstatic物件的開銷,而且static物件還可以儲存

遞迴呼叫的中間狀態,並且可為各個呼叫層所訪問。

如:

//求n的階乘

intfactorial

(int n)

return result;

}//求第n個斐波那契數

intfib

(int n)

return result;

}

函式的遞迴呼叫

乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式。c語言允許函式的遞迴呼叫。在遞迴呼叫中,主調函式又是被調函式。執行遞迴函式將反覆呼叫其自身。每呼叫一次就進入新的一層。例如有函式f如下 int f int x 這個函式是乙個遞迴函式。但是執行該函式將無休止地呼叫其自身,這當然是不正...

函式的遞迴呼叫

遞迴函式 呼叫自己本身的函式叫遞迴函式 實現如下 main.c define crt secure no warnings include include 遞迴列印字串逆序 int reverse char str if str 0 判斷遞迴結束條件 reverse str 1 printf c s...

函式的遞迴呼叫

函式的遞迴呼叫 是函式巢狀呼叫的一種特殊形式 具體是指 在呼叫乙個函式的過程中又直接或者間接地呼叫到本身 直接呼叫本身 deff1 print 是我是我還是我 f1 f1 間接接呼叫本身 deff1 print f1 f2 deff2 print f2 f1 f1 一段 的迴圈執行的方案有兩種 方式...