美文网首页IT面试
数学归纳法和递归

数学归纳法和递归

作者: sortinnauto | 来源:发表于2018-06-16 00:30 被阅读366次

骨牌一个接一个倒下,就如同一个值到下一个值的过程。

最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。
证明分下面两步:

  1. 证明当n = 1时命题成立。
  2. 证明如果在n = m时命题成立,那么可以推导出在n = m+1时命题也成立。(m代表任意自然数)

这种方法的原理在于:首先证明在某个起点值时命题成立,然后证明从一个值到下一个值的过程有效。当这两点都已经证明,那么任意值都可以通过反复使用这个方法推导出来。把这个方法想成多米诺效应也许更容易理解一些。例如:你有一列很长的直立着的多米诺骨牌,如果你可以:

  1. 证明第一张骨牌会倒。
  2. 证明只要任意一张骨牌倒了,那么与其相邻的下一张骨牌也会倒。

那么便可以下结论:所有的骨牌都会倒下。

例如:等差数列求和公式:

1 + 2 + 3 + ··· + n = n (n+1) / 2

根据数学归纳法,这个问题应该这样证明:

  1. 当n = 1时,1 = 1 * 2 / 2成立;
  2. 假设n = n - 1时,1 + 2 + 3 + ··· + (n - 1) = (n - 1) n / 2成立,那么
    原式左 = 1 + 2 + 3 + ··· + (n - 1) + n
    = (n - 1) n / 2 + n
    = n (n+1) / 2
    = 原式右
  3. 得证。

为什么要说这个呢?
其实在程序设计中,递归就用到了这个思想。

如果将上例运用递归用编程语言写出来如下:

public int sum(int n){
    if(n < 1){    
        return -1;
    }
    if(n == 1){
        return 1;
    }
  //假设n - 1成立,这是一般的情况。
  //在代码书写中,先将一般的情况写出来构建出递归的框架,然后再去排除特殊的情况,以便完成递归。
    return sum(n - 1) + n;    
}

可以发现,这段代码将数学归纳法的思想恰当的体现了出来。

最后我们总结一下递归代码的书写方法:

递归书写方法:

  1. 严格定义递归函数作用,包括参数,返回值,side-effect
  2. 先一般,后特殊
  3. 每次递归必须缩小问题规模
  4. 每次问题缩小规模程度必须为1

相关文章

  • 24点问题-Swift

    数学归纳法递归回溯

  • 数学归纳法

    重温数学归纳法时,发现这玩意儿跟递归就像孪生兄弟一样。 数学归纳法,更像是递归的文字表述。 当数学归纳法通过证明基...

  • 数学归纳法和递归

    最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步: 证明当n = 1时命题成立。证...

  • 数据结构基础-递归和循环技巧

    为什么要用递归 递归是从数学领域的数学归纳法借鉴过来的一种技术。递归代码通常比迭代代码更加简洁易懂。当任务能够被相...

  • 07《算法入门教程》递归算法

    1. 前言 本节内容是递归算法系列之一:递归的介绍,主要介绍了递归的定义,选择了数学归纳法这一数学模型帮助大家可以...

  • 快速理解递归

    *数学归纳法理解 斐波那契数列 其他理解 写出递归函数也就是要处理好递归的3个主要的点:a)出口条件,即递归“什么...

  • 递归算法

    一、说明递归算法就是直接或者间接调用自身的算法,递归函数也如此。递归的数学模型起始就是归纳法。解决一个问题,转化为...

  • Java复习

    递归控制 数学归纳法:用户证明断言对所有自然数(非负整数)成立为什么在讲解之前对数学归纳法做一个解释:在程序中,我...

  • 数据结构与算法分析(1)——基础知识

    M小白的学习笔记 17/11/30 1.数学基础 指数对数幂的运算 直接证明、反证法、数学归纳法 递归与迭代 2....

  • 递归

    在数学归纳法那篇文章里用递归,递归的函数值返回过程与基于循环的迭代看起来似乎一样。那么为什么不用循环来做呢...

网友评论

    本文标题:数学归纳法和递归

    本文链接:https://www.haomeiwen.com/subject/stlmeftx.html