鱼C论坛

 找回密码
 立即注册
查看: 3508|回复: 4

递归分鱼问题

[复制链接]
发表于 2014-8-22 23:02:21 | 显示全部楼层 |阅读模式
10鱼币
尽管有代码,但我还是不能理解,请各位大神详细解释。谢谢!!!!:cry


题目:
abcde五人打渔,打完睡觉,a先醒来,扔掉1条鱼,把剩下的均分成5分,拿一份走了;b再醒来,也扔掉1条,把剩下的均分成5份,拿一份走了;然后cde都按上面的方法取鱼。问他们一共打了多少条鱼?

代码:
<blockquote>#include<stdio.h>



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-22 23:04:55 | 显示全部楼层
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-23 01:08:42 | 显示全部楼层
你这题是错的。题应该是先均分成5份,然后把多余的一条扔掉。这样才能算出来。
<p>int fun(int fishCount,int peopleCount)
{
        //最后函数的出口
        if (peopleCount == 0)
        {
                return 1;
        }
        if(fishCount%PEOPLE_COUNT ==1)
        {
                fishCount = fishCount - (fishCount-1)/PEOPLE_COUNT - 1;
                fun(fishCount,peopleCount-1);
        }
        else
        {
                return 0;
        }
}

int _tmain(int argc, _TCHAR* argv[])
{
        int i;
        for(i=6;i<100000;i++)
        {
                if (fun(i,PEOPLE_COUNT))
                {
                        printf("至少得%d条鱼",i);
                        break;
                }
        }
        return 0;
}</p><p>你看看这个能不能懂!
</p>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-23 03:08:04 | 显示全部楼层
我那个代码是标准答案,用的是递归的思想,但方法过于巧妙,我看不透……所以我想请高手帮忙解读一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-24 17:17:58 | 显示全部楼层
看看那
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 22:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表