猴子吃桃问题(三种方法解决)

题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?

———-

一、思路分析:
采用逆向思维,从后往前推断,发现其中有相同的地方,即出现递推公式,可以采用递归方法。
令S10=1,容易看出S9=2(S10+1),简化一下
S9=2S10+2
S8=2S9+2
…..
Sn=2Sn+1+2
下面我将采用三种方式解决这个问题。(前两种为普通循环方式,第三种为递归方式)

二、代码讲解

1、方法一(while语句)

我以while语句为例,do while等也可以实现,留给读者自己思考、修改

//方法一:
//  Created by Neil Wesley on 16/5/23.
//  Copyright © 2016年 Neil Wesley. All rights reserved.

#include<stdio.h>
int main()
{
    int day=9,x1=0,x2=1;
    while (day>0)
    {
        x1=(x2+1)*2;
        x2=x1;
        day--;
    }
    printf("The first day of picking peaches number is:%d\n",x1);
}

2、方法二(for循环)

//方法二:
//  Created by Neil Wesley on 16/5/23.
//  Copyright © 2016年 Neil Wesley. All rights reserved.

#include<stdio.h>
int main()
{
    int day=9,x1=0,x2=1;
    for(;day>0;day--)
    {
        x1=(x2+1)*2;
        x2=x1;
    }
    printf("The first day of picking peaches number is:%d\n",x1);
}

3、方法三(递归方法)

方法三:
//  Created by Neil Wesley on 16/5/23.
//  Copyright © 2016年 Neil Wesley. All rights reserved.

#include "stdio.h"
int sumPeach(int day)
{
    if (day == 10)
        return 1;
    else
    return 2 * sumPeach(day + 1) + 2;
}
int main()
{
    int sum;
    sum=sumPeach(1);
    printf("The first day of picking peaches number is:%d\n",sum);
}

三、运行结果

以上三种方法的运行结果都是:

运行结果

  • 136
    点赞
  • 487
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值