基础 4.归纳法与递归

归纳法步骤:

1.观察(猜)得到一个规律
2.证明n=1成立
3.证明kn成立的话,kn+1也成立

猜到规律,证明就可以用了, 关键是要猜得到这个规律

和递归的逻辑是一样的

以棋盘放麦粒为例证明等比数列公式 在63前都是对的:

class Result {
    public long wheatNum = 0;  // 当前格的麦粒数
    public long wheatTotalNum = 0;  // 目前为止麦粒的总数
}

public class Lesson4_2 {

    /**
     * @Description: 使用函数的递归(嵌套)调用,进行数学归纳法证明
     * @param k- 放到第几格,result- 保存当前格子的麦粒数和麦粒总数
     * @return boolean- 放到第 k 格时是否成立
     */

    public static boolean prove(int k, Result result) {

        // 证明 n = 1 时,命题是否成立
        if (k == 1) {
            if ((Math.pow(2, 1) - 1) == 1) {
                result.wheatNum = 1;
                result.wheatTotalNum = 1;
                return true;
            } else {
                return false;
            }
        }
        // 如果 n = (k-1) 时命题成立,证明 n = k 时命题是否成立
        else {

            boolean proveOfPreviousOne = prove(k - 1, result);
            result.wheatNum *= 2;
            result.wheatTotalNum += result.wheatNum;
            boolean proveOfCurrentOne = false;
            if (result.wheatTotalNum == (Math.pow(2, k) - 1)) {
                proveOfCurrentOne = true;
            }

            return proveOfPreviousOne && proveOfCurrentOne;

        }

    }

    public static void main(String[] args) {

        int grid = 63;

        Result result = new Result();
        System.out.println(Lesson4_2.prove(grid, result));

    }
}

基础 4.归纳法与递归_第1张图片

不同的是从大往小了推, 逆向递推
可以看到, 其实递归中 实际计算也是从0开始 和循环一样

你可能感兴趣的:(基础 4.归纳法与递归)