用递归函数解决猴子吃桃桃问题。问题描述如下
有一堆桃子不知其数,猴子每天吃前一天的一半多一个,到第n天只剩一个,试编程求这堆桃子的个数。提示:此题是一个递归求解问题,仔细分析问题,找出每天剩下的桃子数和前一天剩下桃...
有一堆桃子不知其数,猴子每天吃前一天的一半多一个,到第n天只剩一个,试编程求这堆桃子的个数。
提示:此题是一个递归求解问题,仔细分析问题,找出每天剩下的桃子数和前一天剩下桃子数的函数关系。如果设第n天剩下的桃子数为f(1),则n天前的桃子数就应该为f(n)(f为函数名)。在递归时,将第n天剩下的桃子数作为递归结束的条件。 展开
提示:此题是一个递归求解问题,仔细分析问题,找出每天剩下的桃子数和前一天剩下桃子数的函数关系。如果设第n天剩下的桃子数为f(1),则n天前的桃子数就应该为f(n)(f为函数名)。在递归时,将第n天剩下的桃子数作为递归结束的条件。 展开
展开全部
依据题意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;
}
所以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)即可,返回的就是六天前的桃子数。
展开全部
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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));
}
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));
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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
}
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
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
}
}
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;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询