算法和数据结构复习(一)引论和基础

常用的有这两种数归,其他的数学归纳法暂不涉及,有兴趣可以拓展学习。还有一些反证法。在进行编程的时候,如果有可能存在未知的情况,可以用归纳法推演一下,尽量避免使用递归。如果你写过的代码并不多,递归带来的性能提升远不及造成的麻烦。甚至递归本身就很糟糕。

①第一数学归纳法:
一般地,证明一个与自然数n有关的命题P(n),有如下步骤:
(1)证明当n取第一个值n0时命题成立。n0对于一般数列取值为0或1,但也有特殊情况;
(2)假设当n=k(k≥n0,k为自然数)时命题成立,证明当n=k+1时命题也成立。
综合(1)(2),对一切自然数n(≥n0),命题P(n)都成立。
②第二数学归纳法:(完整归纳法)
另一个一般化的方法叫完整归纳法(也称第二数学归纳法),在第二步中我们假定式子不仅当n=m时成立,当n小于或等于m时也成立.这样可以设计出这样两步:
(1)证明当n= 0时式子成立.
(2)假设当nm时成立,证明当n=m+ 1时式子也成立.
则命题成立。
②反证法
(1)找到一个反例。
(2)通过定理如果成立,导致一个已知的性质不成立。通过假设定理如果不成立,导致已知的一个性质不成立。
 
还有一个些需要注意的地方,两层for循环其实已经很糟糕了,如果你写了三层的循环,请立即删掉重写。写完代码时,建议留意一下时间复杂度,如果是要考虑空间复杂度,请在代码构思之前就得想好。不过现在的程序员往往更注重时间低,而不是占用资源低。
 
 
原文地址:https://www.cnblogs.com/still-smile/p/13906797.html