大神帮忙解决C语言猴子吃桃的问题

编写程序解决猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了m个。第二天早上又将剩下的桃子吃掉一半,又多吃m个。以后每天早上都吃了前一天剩下的一半多m个。到第n天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子?
编写一个函数,输入m和 n值,返回第一天共摘的桃子数。
在main函数中通过键盘输入m,n值,打印第一天共摘的桃子数。
采用递归的思路设计该函数。(要求打印出每一天的桃子数。)

#include<stdio.h>

int monkey_eat_peach(int day,int n,int m){  // 猴子吃桃递归算法
int peach;
if (day==n)
{
peach = 1;
printf("第%d天,有%d个桃子\n", day, peach);
return peach;
}else{
peach = (monkey_eat_peach(day + 1, n, m) + 1) * 2;
printf("第%d天,有%d个桃子\n", day, peach);
}

return peach;
}

int main(){
int n, m;  // n m的值你可选择由程序运行时再输入 
n = 10;
m = 1;
monkey_eat_peach(1, n, m);
return 0;
}

追问

这是定义10天的

追答

改了一下,把+1改为+m

int monkey_eat_peach(int day, int n, int m){  // 猴子吃桃递归算法
int peach;
if (day == n)
{
peach = 1;
printf("第%d天,有%d个桃子\n", day, peach);
return peach;
}
else{
peach = (monkey_eat_peach(day + 1, n, m) + m) * 2;
printf("第%d天,有%d个桃子\n", day, peach);
}

return peach;
}

追问

不行这是运行结果直接这样了

追答

汗....,彻底无语...

int main(){
    int n, m;  // n m的值你可选择由程序运行时再输入 
    printf("第几天发现剩下1个桃子?:");
    scanf("%d",&n);
    printf("每次多吃了几个?:");
    scanf("%d",&m);
    monkey_eat_peach(1, n, m);
    return 0;
}

追问

大神这个会吗?在n个已经排好序从小到大的数中查询某一个数据,如果找到就指出其在n个数中的位置,否则给出无该数据信息C语言别用递归和迭代的方法实现二分查找法来实现这一查找过程。

追答

参见我以前的回答吧:http://zhidao.baidu.com/question/751714136584218764.html?oldq=1
里面已对该算法作出详细的解释。

追问

http://zhidao.baidu.com/question/1175562669475727379.html大神这里有60分悬赏要不要帮忙做了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-13
#include<stdio.h>
int N,m; //吃到N天还没吃时,剩1个,全局变量
int funn(int n)
{
if(n==N)
return 1;
else
return 2*funn(++n)+2*m;
}
int main()
{
int days,y;
printf("输入N和m\n");
scanf("%d %d",&N,&m);
for(days=1;days<=N;days++)
{
y=funn(days);
printf("days%d\t%d\n",days,y);
if(y<0)
{
printf("有误");
break;
}
}
}
设昨天桃子数y,今天的桃子数t,(y,t均为该天未吃前的数量,即前一天吃过后留下的)
昨天吃掉(1.0/2)*y+m,剩余t=y-((1.0/2)*y+m)=(1.0/2)*y-m
关系式为y=2*t+2*m(y表示昨天,t表示今天)
相似回答