課程
/后端開發(fā)
/C
/C語言入門
如果改成n-1為什么會有亂碼 這個是有順序的嗎 改成n-1是不是 只能算10天以后的
2016-12-19
源自:C語言入門 5-8
正在回答
程序運行從主函數(shù)開始,然后開始執(zhí)行 ?int num = getPeachNumber(1); ?這里調(diào)用getPeachNumber(int n) 函數(shù),并把實參1傳遞給形參n 。在getPeachNumber(1)函數(shù)內(nèi)部,n=1,if為假,就去執(zhí)行num=(getPeachNumber(n-1)-1)/2 ,這里會先計算getPeachNumber(0)[n=1,n-1=0]的值,減一后除2再賦值給num,但是程序不是到getPeachNumber(0)的值(不是遞歸終止條件),就會再次調(diào)用getPeachNumber(int n),這一次把n=0,判斷if為假,進入else去執(zhí)行num=(getPeachNumber(-1)-1)/2 ;這里再次調(diào)用getPeachNumber(-1),重復(fù)上面過程,調(diào)用getPeachNumber(-2),不斷往復(fù),最后是死循環(huán),程序崩潰。
提示:程序遞歸一定要有終止條件,而且程序終止程序要能實現(xiàn), 剛才這個例子,遞歸是n==10,程序從n==1開始,并且n朝著負(fù)方向發(fā)展,遞歸終止無法達到,形成死循環(huán)。 全面寫也可以在getPeachNumber(int n)中加上一條:
if(n==10)
? ? {
? ? ? ?? ? ? ? //遞歸結(jié)束條件
? ? }?
else if(n<1&&n>10) ? ? ? ? ? ? ? //這里發(fā)范圍與實際結(jié)合的,不該有0次,超過十次,桃子吃完了。
{ ? ?printf("提示錯誤語句";? ? ? ? //自己編輯錯誤提示
? ? return 0;
}
?else ?if
? ? ? ? num = getPeachNumber(n+1)*2+2; ? //這里是不應(yīng)該用遞歸呢?
? ? ? ? printf("第%d天所剩桃子%d個\n", ?, ?); //天數(shù),所剩桃子個數(shù)
? ? }
德國一個夏天的童話 提問者
要求就是按照打印順序輸出啊 ?
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
4 回答求支援 好人一生平安
1 回答哪位好心人教我一下
3 回答求好人解答
1 回答50人生日不重復(fù)幾率
3 回答求好心人 謝謝
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-01-10
程序運行從主函數(shù)開始,然后開始執(zhí)行 ?int num = getPeachNumber(1); ?這里調(diào)用getPeachNumber(int n) 函數(shù),并把實參1傳遞給形參n 。在getPeachNumber(1)函數(shù)內(nèi)部,n=1,if為假,就去執(zhí)行num=(getPeachNumber(n-1)-1)/2 ,這里會先計算getPeachNumber(0)[n=1,n-1=0]的值,減一后除2再賦值給num,但是程序不是到getPeachNumber(0)的值(不是遞歸終止條件),就會再次調(diào)用getPeachNumber(int n),這一次把n=0,判斷if為假,進入else去執(zhí)行num=(getPeachNumber(-1)-1)/2 ;這里再次調(diào)用getPeachNumber(-1),重復(fù)上面過程,調(diào)用getPeachNumber(-2),不斷往復(fù),最后是死循環(huán),程序崩潰。
提示:程序遞歸一定要有終止條件,而且程序終止程序要能實現(xiàn), 剛才這個例子,遞歸是n==10,程序從n==1開始,并且n朝著負(fù)方向發(fā)展,遞歸終止無法達到,形成死循環(huán)。 全面寫也可以在getPeachNumber(int n)中加上一條:
if(n==10)
? ? {
? ? ? ?? ? ? ? //遞歸結(jié)束條件
? ? }?
else if(n<1&&n>10) ? ? ? ? ? ? ? //這里發(fā)范圍與實際結(jié)合的,不該有0次,超過十次,桃子吃完了。
{ ? ?printf("提示錯誤語句";? ? ? ? //自己編輯錯誤提示
? ? return 0;
}
?else ?if
? ? {
? ? ? ? num = getPeachNumber(n+1)*2+2; ? //這里是不應(yīng)該用遞歸呢?
? ? ? ? printf("第%d天所剩桃子%d個\n", ?, ?); //天數(shù),所剩桃子個數(shù)
? ? }
2016-12-19
要求就是按照打印順序輸出啊 ?