递归书写方法:
1、 严格定义递归函数的作用,包括参数,返回值,Side-effect
Side-effect:函数不仅操作参数和返回值还操作一些权值状态,程序运行本身也有可能对传入的参数进行改变,是执行程序的状态的变化,比较理想的做法是,在程序执行完之后没有Side-effect,即在运行中可以修改一些权值变量但在return的时候改回去
2、 先一般,后特殊
虽然最终函数逻辑和数学归纳法一样(有特殊处理,有一般处理),但写程序时要把一般的逻辑推倒先写完,然后再考虑特殊的值逻辑前面(因为我们起初是不知道有多少特殊情况要处理的),把特殊情况按逻辑插入到函数中
3、 每次调用必须缩小问题规模
4、 每次问题规模缩小程度必须为1(数学归纳法每次为1的递推关系)
循环书写方法:
循环不变式(loop invariant):是一句断言定义各变量所满足的条件
变量a,b在进入和退出循环的时候条件仍然是满足的
循环书写方法:
1、 定义循环不变式,并在循环每次结束后保持循环不变式
2、 先一般,后特殊
3、 每次必须向前推进循环不变式中涉及的变量值
4、 每次推进的规模必须为1