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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用递归函数解决猴子吃桃桃问题。问题描述如下相关的知识,希望对你有一定的参考价值。

有一堆桃子不知其数,猴子每天吃前一天的一半多一个,到第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;
追问

有完整的吗?

追答

这个已经是完整的了啊,你要求六天前的就调用
peachs(6)即可,返回的就是六天前的桃子数。

参考技术A #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;
 

参考技术B #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));

参考技术C #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
参考技术D #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;


C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一

C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一个,第2天接着吃了前一天剩下的一半,再多吃了一个,以后每天如此,直到第n天,只剩下1个桃子,问猴子一共摘了多少桃子? 我不用递归会写,用递归怎么写?

#include <stdio.h>

int n;                 //n作为全局变量

int peach(int x)       //表示第x天有几个桃子

    if(x < n)          //如果x不是最后一天,那么这一天桃子的数量等于明天桃子数加1再乘以2
        return 2*(peach(x+1) + 1);
    else if(x == n)    //如果是最后一天,返回1
        return 1;
    else
        return -1;    //异常



int main()

    scanf("%d",&n);    //输入题目中的n
    printf("%d\\n",peach(1));
    return 0;

请采纳。

参考技术A #include <stdio.h>
int n; //n作为全局变量
int peach(int x) //表示第x天有几个桃子

if(x < n) //如果x不是最后一天,那么这一天桃子的数量等于明天桃子数加1再乘以2
return 2*(peach(x+1) + 1);
else if(x == n) //如果是最后一天,返回1
return 1;
else
return -1; //异常

int main()

scanf("%d",&n); //输入题目中的n
printf("%d\n",peach(1));
return 0;
请采纳。
参考技术B #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("输入有误");//N<=30不会溢出
break;


参考技术C 10-5-1=4-2-1=1

以上是关于用递归函数解决猴子吃桃桃问题。问题描述如下的主要内容,如果未能解决你的问题,请参考以下文章

C语言猴子吃桃问题递归法

C语言猴子吃桃递归法

C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一

java经典算法题——猴子吃桃

函数;猴子吃桃函数算法

猴子吃桃(递归)