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;
}