用递归函数解决猴子吃桃桃问题。问题描述如下

有一堆桃子不知其数,猴子每天吃前一天的一半多一个,到第n天只剩一个,试编程求这堆桃子的个数。提示:此题是一个递归求解问题,仔细分析问题,找出每天剩下的桃子数和前一天剩下桃... 有一堆桃子不知其数,猴子每天吃前一天的一半多一个,到第n天只剩一个,试编程求这堆桃子的个数。
提示:此题是一个递归求解问题,仔细分析问题,找出每天剩下的桃子数和前一天剩下桃子数的函数关系。如果设第n天剩下的桃子数为f(1),则n天前的桃子数就应该为f(n)(f为函数名)。在递归时,将第n天剩下的桃子数作为递归结束的条件。
展开
 我来答
Soucula
推荐于2017-11-25 · TA获得超过3092个赞
知道小有建树答主
回答量:744
采纳率:93%
帮助的人:77.3万
展开全部
依据题意f(n - 1) = f(n)/2 - 1 下一天等于是前一天吃了一半还多一个剩下的。
所以f(n) = 2 * f(n - 1) + 2
例如:第m天剩余10个桃子,吃掉一半加一个得到4个,此时下天是4个桃子,接着吃掉一半加一个得到1个,再下一天是1个桃子。
long peachs(int n)
{
if (n <= 0) //不合法返回0
return 0;
if (n == 1) //第n天 f(1)
return 1;
return 2 * peachs(n - 1) + 2; //n天前的桃子数等于n-1天前的桃子数的两倍加2
//f(n) = 2 * f(n - 1) + 2;
}
追问
有完整的吗?
追答
这个已经是完整的了啊,你要求六天前的就调用
peachs(6)即可,返回的就是六天前的桃子数。
好名字都被取了
2019-10-19 · TA获得超过423个赞
知道答主
回答量:101
采纳率:90%
帮助的人:6.3万
展开全部
#include <stdio.h>
#include<stdlib.h>
#include<math.h>

  int Monkey(int n);

 main()

int n; //猴子吃桃的天数,由用户输入

printf("Input days n:");
scanf("%d",&n);

//增强函数的健壮性
if(n<=0)
printf("data error!\n");
else
printf("x=%d\n",Monkey(n));

system("pause");
 }

 //函数功能:用递归法求累加
 int Monkey(int n)
 {
int x;
if(n==1)
x=1;
else
x=2*(Monkey(n-1)+1);
return x;
 }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f3b3e02
2013-05-16 · TA获得超过2156个赞
知道小有建树答主
回答量:821
采纳率:90%
帮助的人:589万
展开全部
#include "stdio.h"
int f(int n)
{
if(n>0)
return 2*(f(n-1)+1);//逆推:n天的桃子数等于n-1天前的桃子数的两倍加2
else
return 1;
}
int main()
{
int n;
printf("输入天数:");
scanf("%d",&n);
printf("%d",f(n));
}
追问
有些不对额

请输入天数:4
4天前的桃子数为22
运行不到
追答
//22是3天前

#include "stdio.h"
int f(int n)
{
if(n>0)
return 2*(f(n-1)+1);//逆推:n天的桃子数等于n-1天前的桃子数的两倍加2
else
return 1;
}
int main()
{
int n;
printf("输入天数:");
scanf("%d",&n);
printf("%d",f(n-1));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我讨厌我的母亲
2019-10-21
知道答主
回答量:2
采纳率:0%
帮助的人:1428
展开全部
#include <stdio.h>

int Tao(int n)
{
if(n == 10) // 第十天桃子只剩一个
{
return 1;
}
else
return 2 * (Tao(n+1) + 1); // n = 1时 第一天地桃子就是第二天地桃子的 + 1 再翻倍

}

int main()
{
int j = Tao(1);
printf("%d", j); // j = 1534
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
4747哦
2019-07-13 · TA获得超过675个赞
知道小有建树答主
回答量:365
采纳率:73%
帮助的人:73万
展开全部
#include<stdio.h>
int N; //吃到N天还没吃时,剩1个,全局变量
int funn(int n)
{
if(n==N)
return 1;
else
return 2*funn(++n)+2;
}
int main()
{
int days,y;
printf("输入多少天后剩一个\n");
scanf("%d",&N);
for(days=1;days<=N;days++)
{
y=funn(days);
printf("days%d\t%d\n",days,y);
if(y<0)
{
printf("有误");
break;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式