函式的遞迴呼叫二

2021-08-07 11:15:14 字數 1388 閱讀 9392

在呼叫乙個函式的過程中又出現直接或間接地呼叫該函式本身,稱為函式的遞迴呼叫。

int f(int x)

{int y,z;

z=f(y);

return(2*z);

在呼叫函式f的過程中,又要呼叫f函式,這是直接呼叫本函式。

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

顯然,這是乙個遞迴問題。要求第5個人的年齡,就必須先知道第4個人的年齡,而第4個人的年齡也不知道,要求第4個人的年齡必須先知道第3個人的年齡,而第3個人的年齡又取決於第2個人的年齡,第2個人的年齡取決於第1個人的年齡。而且每乙個人的年齡都比其前1個人的年齡大2。

即 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-1)+2   (n>1)

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

求解可分成兩個階段:第一階段是「回推」,即將第n個人的年齡表示為第(n-1)個人年齡的函式,而第(n-1)個人的年齡仍然不知道,還要「回推」到第(n-2)個人的年齡……直到第1個人年齡。此時age(1)已知,不必再向前推了。

然後開始第二階段,採用遞推方法,從第1個人的已知年齡推算出第2個人的年齡(12歲),從第2個人的年齡推算出第3個人的年齡(14歲)……一直推算出第5個人的年齡(18歲)為止。也就是說,乙個遞迴的問題可以分為「回推」和「遞推」兩個階段。要經歷許多步才能求出最後的值。顯而易見,如果要求遞迴過程不是無限制進行下去,必須具有乙個結束遞迴過程的條件。例如,age(1)=10,就是使遞迴結束的條件。

#include 

int age (int n);

void main()

int age (int n)

求n!··也可以用遞迴方法,即5!等於4!×5,而4!=3!×4…1!=1。可用下面的遞迴公式表示:

n!=1(n=0,1)

n·(n-1)!(n>1)

#include 

int f(int n)

else

if(n==0||n==1)

return

1; else

return f(n-1)*n;

}void main()

函式的遞迴呼叫

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