C++题目:递归法解猴子吃桃子问题!

来源:百度知道 编辑:UC知道 时间:2024/06/19 02:00:06
以下是题目和我的解法,到底哪里错了?C++达人帮帮忙!

/*猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又
多吃了一个。以后每天早上都吃了前一天剩下的一半另加
一个。到第10天早上想再吃时,就只剩下一个桃子了。求
第一天共摘了多少桃子?*/

#include<iostream.h>

int divide(int n)
{
int i=1;
if(n%2&&n==1)return i;
else{
n=n/2-1;
i++;
divide(n-1);
}
}

void main()
{
for(int i=2;i<10000;i+=2){
if(divide(i)==10){
cout<<i;
break;
}
}
}
我是希望大家看看我的解法哪出问题了!跪谢!!!

你这个程序是错的
按照你的思路
第四行int i=1;
应该为全局变量(估计也会很麻烦)或者从根本上解决,将divide函数参数变为(int i,int n)
用n来控制桃子总数,用i来控制分配次数

还有
你没有限制n的大小
n可能会小于零的

还有很多其他的小问题
导致这个程序从根本上就有纰漏
我根据你的想法,做出了一个程序
望指正

#include<iostream.h>
int monkey(int i,int j)
{
if(i==1)return j;
else{
if(i>1){
i=i/2-1;
j++;
monkey(i,j);
}
else return 0;
}
}
void main()
{
for(int i=2;;i+=2){
int j=1;
if(monkey(i,j)==10){
cout<<i<<endl;
break;
}
}
}

//递归法解猴子吃桃子问题
#include <stdio.h>

#define DAY 3
#define PEACH 4

int arr[DAY] ;
long int times ;
FILE *fp ;

void eat( int day, int peach, int idx )
{
if ( day > 0 && peach >= 0 )
{
int i, i_end ;