weixin_47387970
2020-09-03 16:51
采纳率: 57.1%
浏览 265
已采纳

为什么我这种写法最后运行结果是0呢?

本人萌新,不明白为什么结果是0呢?求大佬们
图片说明

public class A02李白打酒 {

    public static void main(String[] args) {

        System.out.println(f(5,9,2));
    }

    public static int f(int a,int b,int sum) {  //a表示店,b表示花,sum表示酒的总量


        if(a==0&&b==0&&sum==1)  return 1;

        if(a>0)   return f(a-1,b,sum*2);
        if(b>0)   return f(a,b-1,sum-1);

        else return 0;
    }

}
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2020-09-03 17:23
    已采纳

    if(a>0) return f(a-1,b,sum*2);
    if(b>0) return f(a,b-1,sum-1);
    else return 0;
    ->
    int n = 0;
    if(a>0) n = n + f(a-1,b,sum*2);
    if(b>0) n = n + f(a,b-1,sum-1);
    return n;

    打赏 评论
  • shuangmu9768 2020-09-04 08:47

    因为a=0,b=0时,sum不等于1,所以就返回0了。
    应该让a、b以不同的顺序组合,才有可能返回1。

    package cn.lml.ceshi.csdn;
    
    public class Test2 {
        //==============分析:
        //李白有酒2斗,遇到店5次,遇到花10次;
        //李白遇到的花和店共15次,最后一次遇到的是花,前14次不确定。
    
        //遇到的店标记为a,遇到的花标记为b
        private static String[] arr=new String[]{"a","b"};
        //遇到店最多5次
        private static int aMaxNum=5;
        //遇到花最多9次
        private static int bMaxNum=9;
        //初始有酒2斗
        private static int left=2;
        //前14次的结果
        private static String[] result=new String[aMaxNum+bMaxNum];
        //复合条件的组合统计
        private static int count=0;
    
        public static void main(String[] args) {
            goForward(0,0);
            System.out.println("共有 "+count+" 种组合");
        }
    
        private static void goForward(int aNum,int bNum){
            if (aNum+bNum<aMaxNum+bMaxNum){
                for(String str:arr){
                    if("a".equals(str)&&aNum<aMaxNum){
                        result[aNum+bNum]="a";
                        goForward(aNum+1,bNum);
                    }else if("b".equals(str)&&bNum<bMaxNum){
                        result[aNum+bNum]="b";
                        goForward(aNum,bNum+1);
                    }
                }
            }else{
                if(salcLeft()==1){
                    for(String str:result){
                        System.out.print(str);
                    }
                    count++;
                    System.out.println();
                }
            }
        }
    
        private static int salcLeft(){
            int leftResult=left;
            for(String str:result){
                if("a".equals(str)){
                    leftResult=leftResult*2;
                }
                if("b".equals(str)){
                    leftResult=leftResult-1;
                }
            }
            return leftResult;
        }
    }
    

    ababbbbbababab
    abbabbabbbabab
    abbabbbaabbbab
    abbabbbabaabbb
    abbbaabbabbbab
    abbbaabbbaabbb
    abbbabaabbabbb
    baababbbbbabab
    baabbabbabbbab
    baabbabbbaabbb
    baabbbaabbabbb
    babaababbbbbab
    babaabbabbabbb
    bababaababbbbb
    共有 14 种组合

    2 打赏 评论
  • 拓拓拓 2020-09-15 11:45
        public static void main(String[] args) {
    
            System.out.println("结果:"+f(5,9,2));
        }
    
        public static int f(int a,int b,int sum) {  //a表示店,b表示花,sum表示酒的总量
    
            System.out.println("f:"+a+"-"+b+"-"+sum);
            if(a==0&&b==0&&sum==1)  return 1;
    
            if(a>0)   return f(a-1,b,sum*2);
            if(b>0)   return f(a,b-1,sum-1);
    
            else return 0;
        }
    

    运行结果 ↓

    f:5-9-2
    f:4-9-4
    f:3-9-8
    f:2-9-16
    f:1-9-32
    f:0-9-64
    f:0-8-63
    f:0-7-62
    f:0-6-61
    f:0-5-60
    f:0-4-59
    f:0-3-58
    f:0-2-57
    f:0-1-56
    f:0-0-55
    结果:0
    

    最后a=0,b=0,sum!=1 当然就返回0咯

    1 打赏 评论

相关推荐 更多相似问题