int?hehe(int?n)?{
成都創(chuàng)新互聯(lián)公司專注于肅州企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。肅州網(wǎng)站建設(shè)公司,為肅州等地區(qū)提供建站服務(wù)。全流程按需定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
if(n=1)?return?1;
return?n?*?hehe(n-1);
}
我們一點(diǎn)一點(diǎn)來看:
首先 n = 0 傳入,if條件滿足 返回 hehe(0) = 1
在傳入 n = 1, if條件還是滿足 返回 hehe(1) = 1
我們傳入?yún)?shù) n = 2, if 條件不滿足 hehe(2) = 2 * hehe( 2 - 1 )= 2 * 1
在我們傳入 n =3 , if條件不滿足 hehe(3) = 3 * hehe(2) == 3 * 2 * 1
你繼續(xù)這個(gè)步驟 ,對(duì)任何正整數(shù)n
hehe(n) = n * hehe(n-1) = n * (n-1) * ......* 1
明白了嗎?!
一個(gè)函數(shù)的函數(shù)名既是該函數(shù)的代表,也是一個(gè)變量。由于函數(shù)名變量通常用來把函數(shù)的處理結(jié)果數(shù)據(jù)返回給調(diào)用函數(shù),即遞歸調(diào)用,所以一般把函數(shù)名變量稱為返回值,函數(shù)的返回值類型是在定義函數(shù)時(shí)指定的。
函數(shù)可以有返回值,也可以沒有返回值。
1、沒有返回值的函數(shù):功能只是完成一個(gè)操作,應(yīng)將返回值類型定義為void,函數(shù)體內(nèi)可沒有return語句。
2、有返回值的函數(shù):函數(shù)的最后會(huì)有一個(gè)返回值return,可以用來獲取該函數(shù)執(zhí)行結(jié)果返回給該函數(shù),讓外部調(diào)用該函數(shù)的。
一個(gè)函數(shù)的函數(shù)名既是該函數(shù)的代表,也是一個(gè)變量。由于函數(shù)名變量通常用來把函數(shù)的處理結(jié)果數(shù)據(jù)返回給調(diào)用函數(shù),即遞歸調(diào)用,所以一般把函數(shù)名變量稱為返回值,函數(shù)的返回值類型是在定義函數(shù)時(shí)指定的。
擴(kuò)展資料
C程序中的print函數(shù):
是這樣寫的:printf("%d\n",printf("%d",printf("%d",i)));
一共有三個(gè)printf函數(shù),我們可以使用一些代號(hào)來簡(jiǎn)化這個(gè)printf函數(shù),如下:
代號(hào)A: printf("%d",printf("%d",i));
代號(hào)B: printf("%d",i)
則C程序代碼可以簡(jiǎn)化為:printf("%d\n",A); 那么我們就先來求A。而A,又可以簡(jiǎn)化為:printf("%d",B);那么就先來求B。
B是 printf("%d",i),打印出“123”,即在C語言運(yùn)行結(jié)果中,你最先看到的是123。C語言printf函數(shù)的返回值是printf實(shí)際控制輸出的字符數(shù),那么打印的123 就是3個(gè)字符,因此printf("%d",i)返回的就是3,也就是B是3。
那么,A就可以寫為printf("%d",printf("%d",3));打印出3,即在運(yùn)行結(jié)果中,你緊接著會(huì)看到3。
而打印出的3是1個(gè)字符,因此A就是1,那么printf("%d\n",A); 實(shí)際上就是printf("%d\n",1); 打印出1。
參考資料來源:百度百科-返回值
return
表示從被調(diào)函數(shù)返回到主調(diào)函數(shù)繼續(xù)執(zhí)行,返回時(shí)可附帶一個(gè)返回值,由return后面的參數(shù)指定。
return通常是必要的,因?yàn)楹瘮?shù)調(diào)用的時(shí)候計(jì)算結(jié)果通常是通過返回值帶出的。
如果函數(shù)執(zhí)行不需要返回計(jì)算結(jié)果,也經(jīng)常需要返回一個(gè)狀態(tài)碼來表示函數(shù)執(zhí)行的順利與否(-1和0就是最常用的狀態(tài)碼),主調(diào)函數(shù)可以通過返回值判斷被調(diào)函數(shù)的執(zhí)行情況。
return語句后面具體是什么內(nèi)容,這就要具體情況具體分析了:
(1)
在返回類型是char的函數(shù)中,return后應(yīng)該是char類型的值;
(2)
在返回類型是int的函數(shù)中,如果是要停止函數(shù)的調(diào)用,最好應(yīng)該為0;其他的按照你的目的而定,只要是int
類型就行了
(3)
在返回類型是結(jié)構(gòu)類型的函數(shù)中,return后應(yīng)該是結(jié)構(gòu)的一個(gè)實(shí)例對(duì)象。
總之,函數(shù)定義為什么樣的返回類型,該函數(shù)中return后就應(yīng)該是相應(yīng)類型的值。
...
從匯編的角度來說,函數(shù)返回值,其實(shí)就是函數(shù)返回后,cpu中eax的值。在C語言等語方中,在函數(shù)中寫了返回語句,那么函數(shù)在返回時(shí),就會(huì)對(duì)eax作最后賦值。
int find(int a,int b)
{
if(b=0) return 100;
else
find(--a,--b);/這里為什么不用返回值?/
}
//為什么不用返回值呢,因?yàn)榇顺绦蜻M(jìn)行遞歸后,在最初返回時(shí),eax的值被賦值為100,而之后的回溯過程中,程序并沒有修改eax的值,所以到最后,返回值還是100。
這種寫法是會(huì)出問題的。應(yīng)寫成。
int find(int a,int b)
{
if(b=0) return 100;
else
return find(--a,--b);
}
為什么了修改之后就出錯(cuò)呢,如以上所說,這很好理解,因?yàn)槌绦蜃詈笳{(diào)用了printf()。eax中的值是printf()的返回值。若把他當(dāng)成find()的返回值自然是出錯(cuò)了。