4 10 函式的遞迴呼叫

2021-06-28 23:27:59 字數 1620 閱讀 4721

在呼叫乙個函式的過程中又出現直接或間接地呼叫該函式本身,稱為函式的遞迴(recursive)呼叫。c++允許函式的遞迴呼叫。例如:

int f(int x)

以上是直接呼叫本函式,見圖4.9。

圖4.10表示的是間接呼叫本函式。在呼叫f1函式過程中要呼叫f2函式,而在呼叫f2函式過程中又要呼叫f1函式。

圖 4.9

圖 4.10

從圖上可以看到,這兩種遞迴呼叫都是無終止的自身呼叫。顯然,程式中不應出現這種無終止的遞迴呼叫,而只應出現有限次數的、有終止的遞迴呼叫,這可以用if語句來控制,只有在某一條件成立時才繼續執行遞迴呼叫,否則就不再繼續。

包含遞迴呼叫的函式稱為遞迴函式。

【例4.10】有5個人坐在一起,問第5個人多少歲?他說比第4個人大兩歲。問第4個人歲數,他說比第3個人大兩歲。問第3個人,又說比第2個人大兩歲。問第2個人,說比第1個人大兩歲。最後問第1個人,他說是10歲。請問第5個人多大?

每乙個人的年齡都比其前1個人的年齡大兩歲。即:

age(5)=age(4)+2

age(4)=age(3)+2

age(3)=age(2)+2

age(2)=age(1)+2

age(1)=10

可以用式子表述如下:

age(n)=10   (n=1)

age(n)=age(n-1)+2   (n>1)

可以看到,當n>1時,求第n個人的年齡的公式是相同的。因此可以用乙個函式表示上述關係。圖4.11表示求第5個人年齡的過程。

圖 4.11

可以寫出以下c++程式,其中的age函式用來實現上述遞迴過程。

#include using namespace std;

int age(int);//函式宣告

int main( )//主函式

執行結果如下:

18【例4.11】用遞迴方法求n!。

求n!可以用遞推方法,即從1開始,乘2,再乘3……一直乘到n。求n!也可以用遞迴方法,即5!=4!×5,而4!=3!×4,…,1!=1。可用下面的遞迴公式表示:

n! = 1    (n=0, 1)

n * (n-1)!     (n>1)

有了例4.10的基礎,很容易寫出本題的程式:

#include using namespace std;

long fac(int);//函式宣告

int main( )

運**況如下:

please input an integer:10↙

10!=3628800

許多問題既可以用遞迴方法來處理,也可以用非遞迴方法來處理。在實現遞迴時,在時間和空間上的開銷比較大,但符合人們的思路,程式容易理解。

函式的遞迴呼叫

乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式。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 一段 的迴圈執行的方案有兩種 方式...