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

以下是题目和我的解法,到底哪里错了?C++达人帮帮忙!/*猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。... 以下是题目和我的解法,到底哪里错了?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;
}
}
}
我是希望大家看看我的解法哪出问题了!跪谢!!!
展开
 我来答
恩爱且干练丶夜鹰2003
推荐于2017-09-28
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
你这个程序是错的
按照你的思路
第四行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;
}
}
}
谁盗我号谁是SD
推荐于2017-09-10 · 知道合伙人旅游行家
谁盗我号谁是SD
知道合伙人旅游行家
采纳数:2434 获赞数:22682
中国农业大学本科生,工商管理类专业,热爱旅游,喜欢搜集旅游中的各种小时细节,读过很多旅游方面的书

向TA提问 私信TA
展开全部
这是用递归做的:
#include "stdio.h"
int fun(int);
main()
{
int count;
count=fun(1);
printf("count=%d\n",count);
}
int fun(int day)
{
if(day==10)
return 1;
else
return (fun(day+1)+1)*2;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水寒三尺
2008-01-07 · TA获得超过246个赞
知道答主
回答量:116
采纳率:0%
帮助的人:0
展开全部
//递归法解猴子吃桃子问题
#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 ;

i_end = ( (peach<10) ? (peach) : (10) ) ;
for ( i = 0 ; i <= i_end ; i++ )
{
arr[idx] = i ;
eat( day-1, peach-i, idx+1 ) ;
}
return ;
}
else if ( day == 0 && peach == 0 )
{
int i ;

times++ ;
fprintf( fp, "%-10ld:", times ) ;
for ( i = 0 ; i < DAY ; i++ )
fprintf( fp, "%-3d ", arr[i] ) ;
fprintf( fp, "\n" ) ;

return ;
}
else
return ;
}

int main( void )
{
int day, peach ;

day = DAY ;
peach = PEACH ;
times = 0 ;

fp = fopen( "monkey.txt", "w" ) ; /* 打开用于保存结果的文件 */
eat( day, peach, 0 ) ;
fclose( fp ) ; /* 关闭文件 */

return( 0 ) ;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
完美拿证7TpS
2008-01-07 · 超过16用户采纳过TA的回答
知道答主
回答量:233
采纳率:0%
帮助的人:85.1万
展开全部
这是个c的题目呀!
蛮简单的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式