亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

麻煩大家給解答下這個問題

#include <stdio.h>

int a(int b)

{

? ? if(b==10)

? ? {

? ? ? ? return 1;

? ? }

? ? else

? ? {

? ? ? ? printf("第%d天猴子剩下的桃子數為%d個\n",b,2*(a(b+1)+1));

? ? ? ? return 2*(a(b+1)+1);

? ? }


}

int main()

{

? ? printf("%d\n",a(1));

}

這樣為什么得不到正確的結果???錯在哪?

正在回答

1 回答

因為你直接表達式的話就相當于用了兩次遞歸,先聲明再用就可以了。

#include <stdio.h>

int a(int b)

{

? ? if(b==10)

? ? {

? ? ? ? return 1;

? ? }

? ? else

? ? {

? ? ? ? int num=2*(a(b+1)+1);

? ? ? ? printf("第%d天猴子剩下的桃子數為%d個\n",b,num);

? ? ? ? return num;

? ? }


}

int main()

{

? ? printf("%d\n",a(1));

}


0 回復 有任何疑惑可以回復我~
#1

慕牧羊6158366 提問者

用了兩次遞歸?不好意思,我剛學C,不懂你說的意思?為什么這樣就遞歸了兩次?。磕隳苌晕⒄f的詳細些嗎?拜托了
2018-03-23 回復 有任何疑惑可以回復我~
#2

冒泡的魚 回復 慕牧羊6158366 提問者

我感覺他說的直接表達式是你的return 語句后面, 你的 return 2*(a(b+1)+1); 他的 return num; 因為你直接表達式的話就相當于用了兩次遞歸,先聲明再用就可以了。 你的return后的表達式,是等于叫系統再算一次遞歸函數了。可是你之前已經算過一次了,所以最好先賦值給num,再return num這樣。
2018-04-06 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

麻煩大家給解答下這個問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號