c语言猴子吃桃递归
A. c语言作业:用递归法怎么做猴子摘桃知道的大哥大姐帮帮忙!
猴子摘桃问题
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?
#include<stdio.h>
intgetPeachNumber(n){
intnum;/*定义所剩桃子数*/
if(n==10)
return1;/*递归结束条件*/
else{
num=getPeachNumber(n+1)*2+2;/*递归*/
printf("第%d天所剩桃子%d个 ",n,num);/*天数,所剩桃子个数*/
}
returnnum;
}
intmain(void){
intnum=getPeachNumber(1);
printf("猴子第一天摘了%d个桃子。 ",num);
getch();/*屏幕暂留*/
return0;
}
运行结果
B. c语言:猴子吃桃问题,每天吃一半多一个,第13天还剩1个,求共有多少个桃子
#include<stdio.h>
#include<conio.h>
/*第n天所剩桃子数*/
intgetPeachNumber(intn){
intnum;/*定义所剩桃子数*/
inti=0;
if(n==13)
return1;/*递归结束*/
else{
num=getPeachNumber(n+1)*2+2;/*递归*/
printf("第%d天:%d个桃子 ",n,num);/*第n天剩num个桃子*/
}
returnnum;
}
intmain(void){
intnum;
puts("每天剩余的桃子数:");
num=getPeachNumber(1);
putchar(' ');
puts("================================================================");
putchar(' ');
printf("猴子第一天摘了%d个桃子! ",num);
putchar(' ');
getch();/*屏幕暂留*/
return0;
}
运行结果
C. C语言猴子吃桃,递归,return 1
getPeachNumber(x)表示第x天剩下桃子的数目
根据你的递归程序,到第十天只剩一个,所以getPeachNumber(10)=1
这个getPeachNumber(10)是反馈给getPeachNumber(9)的
因为getPeachNumber(9)=(getPeachNumber(10)+1)*2
这样你知道第十天剩1个,就返回去算出第九天
算出第九天又能算出第八天
以此类推最后得到第一天
D. 用递归函数解决猴子吃桃桃问题。问题描述如下
依据题意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;
}
E. C语言猴子吃桃递归法
一个猴子摘了一些桃子,它每天吃了其中的一半然后再多吃了一个,
直到第10天,它发现只有1个桃子了,问它第一天摘了多少个桃子?
猴子分N天吃完了桃子,要想求出第1天的桃子数,就先要求出第2天的桃子数,.......因此,有:
a1=(a2+1)*2;
a2=(a3+1)*2;
a3=(a4+1)*2;
......
a9=(a10+1)*2;
a10=1;
现在就知道了算法,我们可以用递归来求解:
int qiu(int a,int n)
{
if(n==1) a=1; //第10天就只剩1个了
else a=(a(n-1)+1)*2; //前一天总比后1天多一半加1
}
-------------------------------------
#include<stdio.h>
int qiu(int a,int n);
main(){
int zuih=1,tians=10;//最后一天的个数,天数
long sum;
sum=qiu(1,10);
printf("di yi tian you %ld ge.\n"):
}
int qiu(int a,int n)
{
if(n==1) a=1; //第10天就只剩1个了
else a=(a(n-1)+1)*2; //前一天总比后1天多一半加1
}
F. C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一
#include<stdio.h>
intn;//n作为全局变量
intpeach(intx)//表示第x天有几个桃子
{
if(x<n)//如果x不是最后一天,那么这一天桃子的数量等于明天桃子数加1再乘以2
return2*(peach(x+1)+1);
elseif(x==n)//如果是最后一天,返回1
return1;
else
return-1;//异常
}
intmain()
{
scanf("%d",&n);//输入题目中的n
printf("%d ",peach(1));
return0;
}
请采纳。
G. C语言递归问题 猴子吃桃
你不应该在被调函数中定义m=1 不然当你反复调用被调函数是 m都会被重新赋值。
我的程序:
#include <stdio.h>
int sb(int,int);
int main( )
{
int n;
scanf("%d",&n);
printf("The monkey got %d peachs in first day.\n",sb(1,n));
return 0;
}
int sb(int m,int n)
{
if(m==n)
return 1;
else
return 2*(sb(m+1,n)+m);
}
H. 用递归解决猴子吃桃的问题
j = 2 * (monkey(i - 1) + n - i + 1);
修改下
j = 2 * (monkey(i - 1) + i);
I. c语言猴子吃桃子分析程序,第n天都吃了前一天剩下的一半加天数n个,尤其是那个递归公式是怎么给出来的
天数D 吃掉E 剩余R
n x/2+n 0 x/2+n=x x=2*n=2*(0+ n)
n-1 y/2+n-1 x y/2+n-1+x=y y=2*(x+ n-1)
n-2 z/2+n-2 y z/2+n-2+y=z z=2*(y+ n-2)
n-3 u/2+n-3 z u/2+n-3+z=u u=2*(z+ n-3)
n-4 v/2+n-4 u v/2+n-4+u=v v=2*(u+ n-4)
...
2 xx/2+2 ...
1 xxx/2+1 xx xxx/2+1+xx=xxx xxx=2*(xx+ 1)
你的代码有点问题,可通过以下代码验证:
#include <stdio.h>
int main()
{
int n=0,x=0,i=0; //x初值为0
printf("input n:");
scanf("%d",&n);
for(i=n;i>0;i--)
{
x = ( x+i )*2 ;
}
printf("The monkey got %d peachs in first day.\n",x);
i=0;
do{
int e; //吃掉的
i++;
e=x/2 + i ;
x -= e ; //剩余
printf("%-10de=%-10d r=%-10d\n", i, e , x );
}
while( x > 0 ) ;
return 0;
}