2 u012197585 u012197585 于 2016.09.06 21:28 提问

贪吃的猴子c语言,,,,,,,,,,,,

有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。
第 2 天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上
都吃了前一天剩下的一半加天数个(例如,第 5 天吃了前一天剩下的一般加 5 个)。到第 n
天早上再想吃的时候,就只剩下一个桃子了。
输入:
天数 n
输出:
第一天的桃子个数
请问下思路,总是绕不过来弯,用递归如何实现呢

8个回答

q4444tita
q4444tita   2016.09.06 23:57
已采纳

你可以倒着来,这样想。
get(1)=1就是第一天有一个桃
get(2)=2(1+(n-1))
get(3)=2(get(2)+(n-2))
这样以此类推
get(n)=2(get(n-1)+(n-(n-1)))
然后化简
得到一个递归公式
也就是如果是n天那么桃子就有
2(get(n-1)+1)个
如果n等于一那么只有一个桃子

用手机写代码蛋疼

这里就不贴代码了

楼主自己完善

u010575396
u010575396   2016.09.06 22:05

根据天数递归,public class Test {
private static int c = 1;
public void getC(int n){
if(n>0){
c=(c+n)*2;
getC(n-1);
}
}
public static void main(String[] args) {
new Test().getC(2);
System.out.println(c);
}
}
java 代码供你参考

dragon_dy
dragon_dy   2016.09.06 22:16

int N = 3;
int f(int n)
{
if (n == N){
return 1;
}
else{
return (f(n + 1) + n) * 2;
}
}

qq_29594393
qq_29594393   Ds   Rxr 2016.09.06 22:17
#include<stdio.h>
 根据天数递归
 int c = 1;
 void getC(int n){
if(n>0){
c=(c+n)*2;
getC(n-1);
}
}
 void main() {
getC(2);
printf("%d",c);
}
}
zhijiansha02074065
zhijiansha02074065   2016.09.06 23:33

大致思路如下,手机写的,没调试
假设桃子总数为sum,
那么第n天吃过桃子之后也就是n+1天吃桃子之前剩余的桃子函数如下
int sum = 4;
int f(int n)
{
if(n<=0) return 0;
else if(n==1) return (sum/2 - 1);
else return (f(n-1)/2-n);
}

int main()
{
//请输入N,N>1
while(1)
{
if(f(N-1)==1) break;
sum++;
}
//此处得到sum的值
return 0;
}

tutuxs
tutuxs   2016.09.07 00:08
 // 有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。
// 第 2 天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上
// 都吃了前一天剩下的一半加天数个(例如,第 5 天吃了前一天剩下的一般加 5 个)。到第 n
// 天早上再想吃的时候,就只剩下一个桃子了。
// 输入:
// 天数 n
// 输出:
// 第一天的桃子个数

#include <iostream>
using namespace std;

// static int a = 0;

int eattheday(int n, int max, int a)
{
    if(n == 1)
        return 1;
    if(a < max - 1)
        // a += 1;
    if(a < max)
        a+=1;
    return (eattheday(n-1, max, a) + a) * 2;
}

int main()
{
    int n; // 天数
    int day; // 记录天数
    int a = 0;
    cin >> n;
    day = n;
    cout << eattheday(n, day, a);

    return 0;
}

/*
假设用了3天
                      首次吃(一半)          再吃                 剩余
第一天(n = 3):        14                     7                   6
第二天(n = 2):         6                     3                   1
第三天(n = 1):                                                       1

a(1) = 1
a(2) = (a(1) + 2) * 2 = 6
a(3) = (a(2) + 1) * 2 = 14

....

a(n) = (a(n-1) + a) * 2  ------ a 自增

*/

tutuxs
tutuxs   2016.09.07 00:09

自己还是很菜,有更好的方法请告诉我,(逃)

a15927007825
a15927007825   2016.09.09 20:24

自己还是很菜,有更好的方法请告诉我,(逃)

Csdn user default icon
上传中...
上传图片
插入图片