李白喝酒

图片说明

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.*;
public class Main {
    static Scanner sc = new Scanner(System.in);
    static int count = 0;
    static char list[] = new char[15];

    static void drink(int wine, int a, int b, int k) {
        if (a < 0 || b < 0 || (wine == 0 && k < 14) || (wine > 0 && k > 14)) return;
        if (wine == 1 && a == 0 && b == 0) {
            count++;
            return;
        }
        list[k] = 'a';
        drink(wine * 2, a - 1, b, k + 1);
        list[k] = 'b';
        drink(wine - 1, a, b - 1, k + 1);

    }

    public static void main(String[] args) throws IOException {
        list[14] = 'b';     //最后一次一定是遇到花才能把酒喝完
        drink(2, 5, 9, 0);
        System.out.println(count);


    }

}


递归题目一直以来就是自己比较疑惑的问题,但是通过李白喝酒这一题,可以初级的了解了递归这一类题目的解题思路。首先需要写出一个递归函数,不管怎么样既然是递归函数,那必须要有递归的出口,还有我们想要做的事情。在代码中drink这一递归函数里面,第一个if就是这一个递归函数的出口,但是递归函数的出口要想得全面,不能遗漏,否则会有错误。

第二个if是一个结束条件,如果剩下的酒只有1,a和b都没了,那么就成立,即可结束,然后count计数,便返回。因为我们已经规定最后一个一定是遇到花,所以就直接给第15个元素赋值b。并且在使用递归函数时,我们也只输入了9个b,既第二个if成立时,那么这一情况就成立,可以return。

全部评论

相关推荐

AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务