第一級遞歸:n=483,i=n/10=48≠0
成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站設計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設公司網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元云夢做網(wǎng)站,已為上家服務,為云夢各地企業(yè)和個人服務,聯(lián)系電話:18980820575
注意此時先遞歸調(diào)用convert(48),待遞歸返回再輸出當前n的個位數(shù)字n%10=3
第二級遞歸:n=48,i=n/10=4≠0
此時繼續(xù)遞歸調(diào)用convert(4),待遞歸返回再輸出當前n的個位數(shù)字n%10=8
第三級遞歸:n=4,i=n/10=0
此時遞歸終止,先輸出當前n的個位數(shù)字n%10=4
再返回上一級遞歸輸出8,最后返回第一級遞歸輸出3
因此最終輸出為:4 8 3
“遞歸”外在表現(xiàn)出來的形式,是:函數(shù)自己調(diào)用自己。也就是說:如果我們定義了一個函數(shù)fun(),那么,在fun函數(shù)體中,fun這個函數(shù)自己調(diào)用自身 ,這就是表示:遞歸調(diào)用。
我們來看一下,下面這個程序段:
上述C語言程序中,第7行到第10行,就是使用“循環(huán)”的方式,來實現(xiàn)從0一直累加到100的和。大部分情況下,“循環(huán)”與“遞歸”之間,都可以相互轉(zhuǎn)換。
在使用遞歸的時候,需要注意以下兩點:
需要有一個“遞歸出口”,如果沒有一個出口,那么遞歸就會一直執(zhí)行下去,一直到將“??臻g”占滿為止。那時程序就會崩潰,所以一定是要有一個“遞歸出口”。
如果所要執(zhí)行的次數(shù)比較多,可以盡量選擇用“循環(huán)”的方式,因為使用“遞歸”的方式,程序執(zhí)行的速度會比較慢。
遞歸有一個堆棧的概念,那就意味著他是一個反理解的過程:就象數(shù)學遞推一樣,你知道第一項,第二項,又知道通項公式,那你就可以知道任何一項。
然后你看代碼:fun(0)==0,fun(1)==1;是告訴你一二項。
fun(n)==fun(n-1)+fun(n-2);是告訴你通項公式。那么,你就可以知道任何一項。你這樣理解就差不多了,具體機器是怎么操作的,那很復雜的,也不需要明白?。。?!
我給你舉個簡單的例子你就明白了,你可以假設n=3
然后代入這個函數(shù),a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
滿意請采納
這句話是不對的。
嵌套是兩種結構間的關系,而不是函數(shù)間的關系。遞歸是一個函數(shù)調(diào)用自身,可以看作是一個函數(shù)調(diào)用另一個函數(shù)中的較特別的例子。
函數(shù)嵌套與遞歸調(diào)用的區(qū)別函數(shù)嵌套是語言特性,遞歸調(diào)用是邏輯思想。
擴展資料:
函數(shù)嵌套函數(shù)嵌套允許在一個函數(shù)中調(diào)用另外一個函數(shù)。
遞歸調(diào)用而遞歸是一種解決方案,一種思想,將一個大工作分為逐漸減小的小工作。遞歸是一種思想,只不過在程序中,就是依靠函數(shù)嵌套這個特性來實現(xiàn)了。遞歸最明顯的特點就是,自己調(diào)用自己。
函數(shù)嵌套就是函數(shù)調(diào)用函數(shù),是普遍的,遞歸就是函數(shù)調(diào)用自身,使函數(shù)嵌套的一個特例。嵌套調(diào)用就是某個函數(shù)調(diào)用另外一個函數(shù),遞歸調(diào)用是一個函數(shù)直接或間接的調(diào)用自己。
C語言可以遞歸調(diào)用,但是(函數(shù))不能嵌套定義。
例如:
int?fact(int?n)
{
if?(n?==?0)
return?1;
else
return?n?*?fact(n?-?1);
}
圖中的遞歸調(diào)用是允許的。
而:
void?foo()
{
void?bar()
{
//?Some?code
}
}
這樣在函數(shù)內(nèi)定義函數(shù)是不允許的。
不過結構體是可以嵌套定義的,例如:
struct?test?{
int?a;
struct?demo?{
char?b;
};
};
這樣在結構體內(nèi)定義結構體,是可以的。