C语言李白打酒蓝桥杯 真的不太懂递归调用,希望大神帮帮我 感激不尽

zyckhuntoria 2016-03-09 12:13:15
这个程序哪里错了呢??
int fun(int store,int flower,int wine){

if(store>=0&&flower>=0)
{


if(store==0&&flower==0&&wine==1)
{

return 1;

}
else
{
return fun(store-1,flower,2*wine)+fun(store,flower-1,wine-1);
}

}
}
int main(int argc, char *argv[]) {
printf("%d",fun(5,9,2));
return 0;
}

还有底下的函数 怎么

#include <stdio.h>
int count = 0;
char a[15];

void fun(int i,int store, int flower, int wine){
  //函数结束条件
  if((store>5)(flower>10))return;
  else if((store==5)&&(flower==10)&&(i==15)) {
    if(a[14]=='b'&&wine==0){
    count++;
    }
    return;
  }

  //逢店加一倍
 a[i]='a';
  fun(i+1,store+1,flower,wine*2);

  //遇花减一斗
  a[i]='b';
  fun(i+1,store,flower+1,wine-1);

}//这一部分怎么具体运行的呢 怎么我觉得永远都是aaaaa连在一起
int main(int argc, char *argv[]) {

  fun(0,0,0,2);

  printf("%d",count);
  return 0;
}
...全文
681 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
galiniur0u 2016-03-10
  • 打赏
  • 举报
回复
int fum(int i, int store, int flower, int wine)
{
    if(store > 5 || flower > 9)
    {
        return sum;
    }
    else if(wine == 1 && store == 5 && flower == 9)
    {
        printf("%s\n", str);
        return ++ sum;
    }
    str[i] = 'a';
    fum(i + 1, store + 1, flower, wine * 2);
    str[i] = 'b';
    fum(i + 1, store, flower + 1, wine - 1);
    return sum;
}

int main(int argc, char *argv[]) {
    str[14] = 'b';
    printf("%d\n", fum(0, 0, 0, 2));
    return 0;
}
1、楼主的返回条件稍微有点问题,这个if((store>5)(flower>10))return;中间不加||可以运行么? 2、其实楼主不需要判断i是多少,因为按照正常情况store和flower减完,i刚好是这个值,如果某一个数不减完a也不会越界,如果减完了就直接返回了。 3、a[14]='b'是必然条件,因此无需进行判断。
da-xiang 2016-03-10
  • 打赏
  • 举报
回复
#include<stdio.h>

int sum=0;
int f(int a,int b,int c){  // a:店的总数 b:花的总数减1 c:酒的初值
// 任何初始状况,都有两个可能:先遇到店,或者先遇到花
   if(a>0)
     f(a-1,b,c*2); // 逢店加一倍
   if(b>0)
     f(a,b-1,c-1); // 遇花喝一斗
   if(a==0&&b==0&&c==1) //这个是满足要求的终止条件。没有店剩下,还剩一朵花和一斗酒
     sum=sum+1;
    return sum;
}
int main()
{
	int numstore,numflower,jiu;
	printf("输入遇到店的次数:");
	scanf("%d",&numstore);
	printf("输入遇到花的次数:");
	scanf("%d",&numflower);
	printf("输入酒的初值:");
	scanf("%d",&jiu);
    f(numstore,numflower-1,jiu);
    printf("%d\n",sum);
	return 0;
}
cocoabird 2016-03-09
  • 打赏
  • 举报
回复
加几个断点调试下 看看参数变化 在纸上自己画画逻辑

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧