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

题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第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
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
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);
}

三、运行结果

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

运行结果

你可能感兴趣的:(猴子吃桃,递归,问题,C)