c語言遞迴函式誰能幫我解釋一下程式如下

2021-03-04 08:54:42 字數 2659 閱讀 1641

1樓:匿名使用者

a為入口引數,及相當於子函式當中的n,a為1的時候,返回值為1;

否則就是為上一次的結果×a×(a-1);//這裡的a為迴圈函式中的新一輪的a的值

給我解釋一下c語言遞迴函式?

2樓:匿名使用者

遞迴演算法:是一種直接或者間接地呼叫自身的演算法。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。

遞迴演算法的特點

遞迴過程一般通過函式或子過程來實現。

遞迴演算法:在函式或子過程的內部,直接或者間接地呼叫自己的演算法。

遞迴演算法的實質:是把問題轉化為規模縮小了的同類問題的子問題。然後遞迴呼叫函式(或過程)來表示問題的解。

遞迴演算法解決問題的特點:

(1) 遞迴就是在過程或函式裡呼叫自身。

(2) 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。

(3) 遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。

(4) 在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。所以一般不提倡用遞迴演算法設計程式。

遞迴演算法所體現的「重複」一般有三個要求:

一是每次呼叫在規模上都有所縮小(通常是減半);

二是相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入);

三是在問題的規模極小時必須用直接給出解答而不再進行遞迴呼叫,因而每次遞迴呼叫都是有條件的(以規模未達到直接解答的大小為條件),無條件遞迴呼叫將會成為死迴圈而不能正常結束。 例子如下:

描述:把乙個整數按n(2<=n<=20)進製表示出來,並儲存在給定字串中。比如121用二進位制表示得到結果為:「1111001」。

引數說明:s: 儲存轉換後得到的結果。

n: 待轉換的整數。

b: n進製(2<=n<=20)

void

numbconv(char *s, int n, int b)

/* figure out first n-1 digits */

numbconv(s, n/b, b);

/* add last digit */

len = strlen(s);

s[len] = "0123456789abcdefghijklmnopqrstuvwxyz"[n%b];

s[len+1] = '\0';

}void

main(void)

exit(0);}

3樓:匿名使用者

額,抽象的說就是解決乙個問題時重複使用乙個動作,那麼就可以用遞迴的方式來解決,告訴電腦重複做這個動作就行.結合看一些遞迴演算法的簡單程式,應該好懂些.

4樓:申冰潔隱祺

分析一下fac()是如何執行的。假設讀入的n=3。

首先,main()函式中的y=fac(3),引起第1次函式呼叫。進入函式後實參n=3,應執行計算3*fac(2)

為了計算fac(2),引起對fac()函式的第2次呼叫(遞迴呼叫),重新進入函式fac(),實參n=2,應執行計算2*fac(1)。

為了計算fac(1),引起對函式fac()的第3次呼叫(遞迴呼叫),重新進入函式,實參n=1,應執行計算1*fac(0)。

為了計算叫fac(0),引起對函式fac()的第4次呼叫(遞迴呼叫),重新進入函式,實參n=0,此時執行f=1和return(f),完成第4次呼叫,回送結果fac(0)=1,返回到第3次呼叫層。

計算執行f=1*fac(0)和return(f),完成第3次呼叫,回送結果fac(1)=1

返回到第2次呼叫層。

計算執行f=2*fac(1)和return(f)。完成第2次呼叫,回送結果fac(2)=2,返回到第1次呼叫層。

計算執行f=3*fac(2)和return(f).完成第1次呼叫,回送結果fac(3)=6,返回到土函式。

5樓:匿名使用者

先看看下面的例子:

void fun(int i)

printf("%d\n",i);

}intmain()

後如下:好理解

了吧void fun(int i)

printf("%d\n",i/4);

}printf("%d\n",i/2);

}printf("%d\n",i);

}這樣一展開,是不是清晰多了

c語言遞迴函式題,大神給我解釋一下。

6樓:匿名使用者

階乘函式

=f(10)

=10 * f(9)

=10 * 9 * f(8)

.........

=10 * 9 * 8 * 7 * ..... f(1)=10 * 9 * 8 * 7 * ..... 1 * f(0) //0 < 1不符合if return1 結束

誰幫我解釋下以下**,c語言用遞迴函式,實現將乙個十進位制整數轉換成二進位制整數輸出

7樓:匿名使用者

#include

void f(int n)/*可以自複選乙個值,製畫**決問題*/

int main()

return 0;}

誰能幫忙解釋一下這首詩誰能幫我解釋一下這首詩?

李商隱 無題 賞析 相見時難別亦難,東風無力百花殘。春蠶到死絲方盡,蠟炬成灰淚始乾。曉鏡但愁雲鬢改,夜吟應覺月光寒。蓬山此去無多路,青鳥殷勤為探看。註釋 相見 兩句說 相見難得,離別是更難捨難分,又何況是在百花凋謝的暮春時節分別啊!絲 雙關語,與 思 諧音。蠟炬 j 蠟燭。淚 蠟燭燃燒時下流的油脂叫...

幫我解釋一下這是什麼意思,誰能幫我解釋一下這是什麼意思?

這是個迴圈叫foreach 和for迴圈一樣的。舉個例子 int numarray for int i numarray 結果會回是答123456 等價於for int i i numarray.length i 這是一種新du型的for迴圈 employees是乙個zhiemployee型別的數d...

誰能幫我解釋一下這個物理實驗,誰能幫我解釋解釋一下

有 實驗時發現接復通制後電壓 0 3v 表沒有 bai示數,電流表 0 0.6a 也沒有示du數 可能是zhi電池短路 但有 取下dao被測電阻,電壓表示數為電源電動勢,電流表仍不變 可以確定電路連線是正常的 所以那就是滑動變阻器調的電阻值遠遠大於被測電阻的阻值 取下被測抄電阻後,電路斷路,電壓表示...