鱼C论坛

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

递归分鱼问题

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


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

代码:
  1. <blockquote>#include<stdio.h>
复制代码




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

使用道具 举报

 楼主| 发表于 2014-8-22 23:04:55 | 显示全部楼层
  1. #include<stdio.h>
  2. int sub(int n)                                                                                         /*定义函数递归求鱼的总数*/
  3. {
  4.         if (n == 1)                                                                                /*当n等于1时递归结束*/
  5.         {
  6.                 static int i = 0;
  7.                 do
  8.                 {
  9.                         i++;
  10.                 }
  11.                 while (i % 5 != 0);
  12.                 return (i + 1);                                                                        /*5人平分后多出一条*/
  13.         }
  14.         else
  15.         {
  16.                 int t;
  17.                 do
  18.                 {
  19.                         t = sub(n - 1);
  20.                 }
  21.                 while (t % 4 != 0);
  22.                 return (t / 4 * 5+1);
  23.         }
  24. }
  25. main()
  26. {
  27.         int total;
  28.         total=sub(5);                                                                                 /*调用递归函数*/
  29.         printf("the total number of fish is %d\n",total);
  30.         return 0;
  31. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

  18. int _tmain(int argc, _TCHAR* argv[])
  19. {
  20.         int i;
  21.         for(i=6;i<100000;i++)
  22.         {
  23.                 if (fun(i,PEOPLE_COUNT))
  24.                 {
  25.                         printf("至少得%d条鱼",i);
  26.                         break;
  27.                 }
  28.         }
  29.         return 0;
  30. }</p><p>你看看这个能不能懂!
  31. </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-4-27 09:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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