黑马程序员技术交流社区

标题: 刚学完C语言问题很多 [打印本页]

作者: YKS    时间: 2014-7-13 17:59
标题: 刚学完C语言问题很多
        猴子吃桃,猴子第一天将摘下来的桃子吃了一半,但是嘴馋,多吃了一个;第二天又将第一天剩下的桃子吃了一半,又多吃了一个,第三天又将第二天剩下的桃子吃了一半,又多吃了一个.....,10天后猴子还剩下最后一个桃子,求开始有多少个桃子?


作者: fantacyleo    时间: 2014-7-13 19:07
这简直就是数学题。设第n天还没吃时的桃子数为p(n),则p(n) = p(n-1) / 2 - 1 即p(n-1) = (p(n) + 1) * 2 另p(10)=1

p(n-1) = (p(n) + 1) * 2
p(10) = 1

递归模式出来了
作者: YKS    时间: 2014-7-14 01:42
fantacyleo 发表于 2014-7-13 19:07
这简直就是数学题。设第n天还没吃时的桃子数为p(n),则p(n) = p(n-1) / 2 - 1 即p(n-1) = (p(n) + 1) * 2  ...

不用递归 如何解决啊
作者: fantacyleo    时间: 2014-7-14 02:04
YKS 发表于 2014-7-14 01:42
不用递归 如何解决啊

用循环也是一样的,还是根据递推公式,从第10天开始循环到第1天,代入公式求解即可
作者: 丶白菜你个小番    时间: 2014-7-14 14:19
这是一道递归函数题目;
递归函数有个规律:所有的变量递增或递减都被一个公式满足;并且他的最大或最小都是一个常量
因为我们知道第十天的桃子数,从第十天往上推;
假设第n天有f(n)个桃子
第十天的桃子:   f(10)=1;
第九天的桃子:   f(9)=[f(10)+1]*2;
第八天的桃子:   f(8)=[f(9)+1]*2;
....
第n天的桃子:    f(n)=[f(n+1)+1]*2;
根据上述就可以写出递归函数
  1. #include <stdio.h>
  2. int howManyPeach(int n)
  3. {
  4.     if (n==10) {
  5.         return 1;
  6.     }
  7.     return  (howManyPeach(n+1)+1)*2;
  8. }
  9. int main(int argc, const char * argv[])
  10. {

  11.     int result=howManyPeach(1);
  12.     // insert code here...
  13.     printf("%d\n",result);
  14.     return 0;
  15. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2