A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© YKS 中级黑马   /  2014-7-13 17:59  /  1502 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        猴子吃桃,猴子第一天将摘下来的桃子吃了一半,但是嘴馋,多吃了一个;第二天又将第一天剩下的桃子吃了一半,又多吃了一个,第三天又将第二天剩下的桃子吃了一半,又多吃了一个.....,10天后猴子还剩下最后一个桃子,求开始有多少个桃子?

4 个回复

倒序浏览
这简直就是数学题。设第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

递归模式出来了
回复 使用道具 举报
fantacyleo 发表于 2014-7-13 19:07
这简直就是数学题。设第n天还没吃时的桃子数为p(n),则p(n) = p(n-1) / 2 - 1 即p(n-1) = (p(n) + 1) * 2  ...

不用递归 如何解决啊
回复 使用道具 举报
YKS 发表于 2014-7-14 01:42
不用递归 如何解决啊

用循环也是一样的,还是根据递推公式,从第10天开始循环到第1天,代入公式求解即可
回复 使用道具 举报
这是一道递归函数题目;
递归函数有个规律:所有的变量递增或递减都被一个公式满足;并且他的最大或最小都是一个常量
因为我们知道第十天的桃子数,从第十天往上推;
假设第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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马