为了账号安全,请及时绑定邮箱和手机立即绑定

麻烦大家给解答下这个问题

#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,不懂你说的意思?为什么这样就递归了两次啊?你能稍微说的详细些吗?拜托了
2018-03-23 回复 有任何疑惑可以回复我~
#2

冒泡的鱼 回复 慕牧羊6158366 提问者

我感觉他说的直接表达式是你的return 语句后面, 你的 return 2*(a(b+1)+1); 他的 return num; 因为你直接表达式的话就相当于用了两次递归,先声明再用就可以了。 你的return后的表达式,是等于叫系统再算一次递归函数了。可是你之前已经算过一次了,所以最好先赋值给num,再return num这样。
2018-04-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

麻烦大家给解答下这个问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信