归纳法步骤:
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));
}
}
不同的是从大往小了推, 逆向递推
可以看到, 其实递归中 实际计算也是从0开始 和循环一样
网友评论