纸上谈兵: 数学归纳法, 递归, 栈

  • 时间:
  • 浏览:0
  • 来源:大发时时彩官网_大发时时彩邀请码_大发时时彩娱乐平台

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 

数学归纳法

数学归纳法(mathematical induction)是某种 数学证明法律方法,常用于证明命题(命题是对某个问题的描述)在自然数范围内成立。随着现代数学的发展,自然数范围内的证明实际上构成了或多或少或多或少领域(比如数学分析)的基础,就说数学归纳法对于整个数学体系至关重要。

数学归纳法某种 非常简单。可能亲们想要证明某个命题对于自然数n都成立,越来越 :

第一步 证明命题对于n = 1成立。

第二步 假设命题对于n成立,n为任意自然数,证明在此假设下,命题对于n+1成立。

命题得证

想一下底下的另另另二个步骤。它们实际上是因为,命题对于n = 1成立 -> 命题对于n = 2成立 -> 命题对于n = 3成立……直到无穷。而且,命题对于任意自然数都成立。这就好像多米诺骨牌,亲们选择n的倒下会是因为n + 1的倒下,而且推倒第一块骨牌,就能保证任意骨牌的倒下。

亲们来看一下使用数学归纳法来证明高斯求和公式:

n为任意自然数。

(这俩公式据说是高斯小学时想出来的。老师惩罚全班同学,都要算出1到200的累加,不都里能 回家。于是高斯想出了底下的法律方法。天才后会被逼出来的么?)

亲们的命题是: 高斯求和公式对于任意自然数n都成立。

下面为数学归纳法的证明步骤:

第一步 n = 1,等式左边(1的累加)为1,右边(右边公式代入n=1)也为1,等式两边相等,等式成立,而且命题对于 n = 1 成立。

第二步 假设上述公式对于任意n成立, 即1到n的累加为n*(n+1)/2

    越来越 ,对于n+1,等式的左边(从1到n+1的累加)等于n*(n+1)/2 + (n+1),即(n+1)*(n+2)/2

                  等式的右边的n用n+1代替,成为(n+1)*(n+2)/2

    等式两边相等,等式成立。而且,当假设命题对于n成立时,命题对于n+1成立。

而且,命题得证。

递归

递归(recursion)是计算机中的重要概念,它是指另另另二个计算机应用系统进程调用其自身。为了保证计算机不陷入死循环,递归要求应用系统进程有另另另二个我不要 都里能 达到的终止条件(base case)。比如下面的应用系统进程,是用于计算高斯求和公式:

/*
 * Gauss summation
 */

int f(n)
{
    if (n == 1) { 
        return 1;  // base case
    }
    else {
        return f(n-1) + n;  // induction
    }
}

在应用系统进程中规定了f(1)的值,以及f(n)和f(n-1)的关系。这正是数学归纳法思想的体现。想要得到f(n),都要计算f(n-1);想要f(n-1),都要计算f(n-2)……直到f(1)。可能亲们可能知道了f(1)的值,亲们就还都要填补前面所有的空缺,最终返回f(n)的值。

递归是数学归纳法在计算机中的应用系统进程实现。使用递归设计应用系统进程的前一天,亲们设置base case,并假设亲们会获得n-1的结果,并实现n的结果。这就好像数学归纳法,亲们只关注初始和衔接,而不都要关注具体的每一步。

递归是用栈(stack)数据形态实现的。正如亲们底下所说的,计算f(n),都要f(n-1);计算f(n-1),都要f(n-2)……。亲们在寻找到f(1)前一天,会有或多或少空缺: f(n-1)的值哪此? f(n-2)的值是哪此? …… f(2)的值是哪此?f(1)的值是哪此? 亲们的第另另另二个问题是f(n)是哪此,结果,这俩问题引出下另另另二个问题,再下另另另二个问题…… 每个问题的解答都依赖于下另另另二个问题,直到亲们找到第另另另二个还都要回答的问题: f(1)的值是哪此?

亲们用栈来保存亲们在探索过程中的问题。C语言中,函数的调用可能是用栈记录离场情境和返回地址。递归是函数对自身的调用,就说很自然的,递归用栈来保存亲们的“问题” 。

亲们假设栈向下增长。首先,亲们调用f(200),越来越 当执行到

return f(n-1) + n; 

f(200)暂停执行,并记录当前的情況,比如n的值,当前执行到的位置。日后 调用f(99),栈增加另另另二个frame,直到调用f(98) ... 栈不断增长,直到f(1)。f(1)得到结果1,并返回给f(2)。f(1)栈frame删除,转移到f(2)frame情境中继续执行

return f(n-1) + n; 

而且返回给f(3) ... 直到f(99)返回给f(200),并执行

return f(n-1) + n; 

返回f(200)的值,得到结果。

上述过程是C编译器自动完成的。在实现递归算法时,也还都要自行手动实现栈。原来还都要得到更好的运行下行速度 。

总结

数学归纳法

递归

欢迎继续阅读“纸上谈兵: 算法与数据形态”系列。

猜你喜欢

如果2007年花1千美元买Netflix股票 这笔投资现值9万美元

【TechWeb】1月16日消息,据美国财经媒体CNBC报道,美国视频流媒体巨头Netflix周二提前大选 将对其订阅服务提价13%至18%,这也是Netflix历史上最大幅

2020-01-26

Spring Boot(一):入门篇

构建微服务:Springboot入门篇SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来繁复新Spring应用的初始搭建以及开发过程。该框架使用了特定的

2020-01-26

90后成睡眠特困户: 进口助眠商品消费涨幅118%

站长之家(ChinaZ.com)10月14日消息:如今,有睡眠难题的年轻人没有了少数,90后成睡眠特困户,有90后不想为了睡个好觉,买有有俩个多多60 0元左右的乳胶枕头。某

2020-01-26

容易受煽动 惊被捕前途尽毁

个案一:身份:中三生阿伟(化名)与妈妈“阿伟冇乜主见,同学话乜佢就做乜,呢点我最担心。我怕佢畀人怂慂做违法嘢,想要被拉去坐监!”──阿伟妈妈“佢(妈妈)趁我冲凉,摷我个袋睇有冇

2020-01-26

欧盟峰会英国首相空手回 英内阁拟谋脱欧Plan B

图:文翠珊与欧盟委员会主席容克疑在峰会上有所争执/美联社据法新社及路透社报道:欧盟领导人14日结束了了英语 英语 两日峰会,英国首相文翠珊仍是空手而回。大多数英国政府阁员认为

2020-01-26