相當(dāng)于循環(huán),要有判斷條件,傳遞進(jìn)去的參數(shù)要變化,滿足條件調(diào)用自身,不滿足條件就開(kāi)始一層一層返回。簡(jiǎn)單例子:
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了昔陽(yáng)免費(fèi)建站歡迎大家使用!
int
f(int
i){
int
sum=0;
if(i0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}
程序調(diào)用自身的編程技巧稱為遞歸( recursion)?!?/p>
一個(gè)過(guò)程或函數(shù)在其定義或說(shuō)明中有直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問(wèn)題層層轉(zhuǎn)化為一個(gè)與原問(wèn)題相似的規(guī)模較小的問(wèn)題來(lái)求解,遞歸策略只需少量的程序就可描述出解題過(guò)程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語(yǔ)句來(lái)定義對(duì)象的無(wú)限集合。一般來(lái)說(shuō),遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿足時(shí),遞歸返回?!?/p>
注意:
(1) 遞歸就是在過(guò)程或函數(shù)里調(diào)用自身;
(2) 在使用遞歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口
假設(shè)n=9
1判斷n=9非0,把n=9壓入棧中,執(zhí)行ttor(4);棧中為9
2判斷n=4非0,把n=4壓入棧中,執(zhí)行ttor(2);棧中為9,4
3判斷n=2非0,把n=2壓入棧中,執(zhí)行ttor(1);棧中為9,4,2
4判斷n=1非0,把n=1壓入棧中,執(zhí)行ttor(0);棧中為9,4,2,1
5判斷n=0不滿足條件,函數(shù)結(jié)束
6從棧中取出n=1,執(zhí)行ttor(1)的剩余部分,輸出1
7從棧中取出n=2,執(zhí)行ttor(2)的剩余部分,輸出0
8從棧中取出n=4,執(zhí)行ttor(4)的剩余部分,輸出0
9從棧中取出n=9,執(zhí)行ttor(9)的剩余部分,輸出1
int main(int argc, char *argv[])
main參數(shù) argc 是保存命令的個(gè)數(shù),argv 保存命令
例如 test -a -b -c
test程序啟動(dòng)時(shí)接受了 4個(gè)參數(shù)(默認(rèn) test也屬于一個(gè)參數(shù) ),個(gè)數(shù)保存到argc -a -b -c 保存到argv
遞歸。我覺(jué)得你被這個(gè)名氣搞暈了而已,其實(shí)就很簡(jiǎn)單,在某個(gè)函數(shù)中再調(diào)用這個(gè)函數(shù),就叫遞歸
例如
int test(int a)
{
return test(a+1); //死循環(huán) ,不斷進(jìn)入test函數(shù) a不斷加1。。。。
} //你可以理解為一個(gè)for 或者while的另一種形式,反正就是循環(huán),加判斷以停止遞歸調(diào)用