已有140人关注
递归解分鱼问题
发表在C语言答疑区 2017-01-18
是否精华
版块置顶:

#include <stdio.h>
int sub(int n)            /*定义函数递归求鱼的总数*/
{
    if (n == 1)           /*当n等于1时递归结束*/
    {
        static int i = 0;
        do
        {
            i++;
        }
        while (i % 5 != 0);
        return (i + 1);         /*5人平分后多出一条*/
    }
    else
    {
        int t;
        do
        {
            t = sub(n - 1);
        }
        while (t % 4 != 0);
        return (t / 4 * 5+1);
    }
}
main()
{
    int total;
    total=sub(5);           /*调用递归函数*/
    printf("The total number of fish is %d\n",total);
    return 0;
}
如何执行编译的,老师能说下具体的流程吗

分享到:
精彩评论 4
again
学分:250 LV4
2017-01-18
沙发

哪本书?第几版?第几页?


问题是什么?

        

yyxxx
学分:11 LV2
2017-01-18
板凳

C语言实例版184页  请问老师这程序具体怎么执行的

yyxxx
学分:11 LV2
2017-01-19
地板

yyxxx 发表于2017-01-18 18:35

C语言实例版184页  请问老师这程序具体怎么执行的

在第四次调用函数sub(2-1)时,返回的是i=16,t=21,接下来具体怎么执行的?

again
学分:250 LV4
2017-01-20
4L

yyxxx 发表于2017-01-18 18:35

C语言实例版184页  请问老师这程序具体怎么执行的

想要知道是怎么执行的,一步一步调试就可以了。

这里面有两个难点;一个是使用静态变量。这就是使这个函数在调用时(sub(1))的返回值不相同了,即使参数是相同的。

第二个就是递归的概念,这个可以画出函数的每次调用的步聚来看清楚,如:

  1. sub(1) = 6;  

  2. sub(2) = (sub(1) = 11) / 4 * 5 + 1;

  3. ...



首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照