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

来源:5-8 递归函数(二)

慕牧羊6158366

2018-03-22 16:30

#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回答

  • 慕九州0926422
    2018-03-23 12:31:28

    因为你直接表达式的话就相当于用了两次递归,先声明再用就可以了。

    #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));

    }


    冒泡的鱼 回复慕牧羊615...

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

    2018-04-06 22:20:33

    共 2 条回复 >

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926206 学习 · 20797 问题

查看课程

相似问题