问答详情
源自:5-8 递归函数(二)

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

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

}

这样为什么得不到正确的结果啊?错在哪?

提问者:慕牧羊6158366 2018-03-22 16:30

个回答

  • 慕九州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));

    }