注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

追寻梦想的路上

人生如代码,代码如人生

 
 
 

日志

 
 
 
 

假设--你真的有勇气吗?(递归调用引发的思考)  

2014-06-09 23:07:58|  分类: 技术篇 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    今天老师讲了递归调用,引发了一些关于假设的思考:

先来看两套题:

1. 5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁,问第4个人比第3个人大2岁,问第3个人,又说比第2个人大2岁,第2个又比第1个大两岁,问第1个人,他说10岁。

编写程序求出第五个人的年龄。

分析:除了第一个人每一个人都比在他前面的人大2岁,不难推出这样的公式

Agen=agen-1+2  n>1

Age1=10            n=1

c语言的递归调用里子程序是这样写的:假设--你真的有勇气吗?(递归调用引发的思考) - 王海鹏 - 王海鹏廊坊师范学院信息技术提高班11期

 

Int ageint n

{

Int c

Ifn==1

C=10

Else

C=agen-1+2

Returnc);

}

    当然这道题,递归思想表现相当明显,掌握中心函数:agen=agen-1+2就不难想到,不断用函数age()调用自己实现第五个人的年龄。其特点是函数本身包含函数本身,不断寻找与它有关的下一个函数,直到寻找到这个函数在n=1时的确定值10,最终实现叠加的效果。如果从程序正面来看:

Age5=age4+2

=age3+2+2

=age2+2+2+2

=age1+2+2+2+2

=10+2+2+2+2=18

2.(经典数学问题)hanoi塔问题。古代有一个梵塔,塔内有3个座ABC,开始时A座上有64个盘子,盘子大小不等,大的在小的下面,盘子大小不等,大的在下,小的在上。有一个老和尚想把64个盘子从A座移到C座,但每次都只允许移动一个盘子,移动过程中都必须保持大盘在下,小盘在上。移动过程中可以利用B座,编写出移动过程。

假设--你真的有勇气吗?(递归调用引发的思考) - 王海鹏 - 王海鹏廊坊师范学院信息技术提高班11期
        分析:为了便于循序渐进的思想,我们先假设a盘子上有1个盘子,那直接将它挪到c座上就行了aàc,如果a座上有2个,则需要将小的先挪到b上,aàb,大的挪到c上,aàc,把小的挪到c上,bàc.

     当a座上有3个盘子时的时候,一般人们的想法都会这样从少的一步一步往多的去想,殊不知还有一个建设性的想法。当挪第三个的时候我们可以想象将前两个看做(假设)成一个,将假设的这个移动到b上,然后将最大的移动到c上在将这两个用相同的方法移动到c上,基于这种假设,移动64aàc,63个看成是一个先移动ba63àb,a(64)àc,b(63)àc,移动63个时将前62个假设成一个a62àba(第63àc,b(62)àc……以此类推,真可以退到第二个移动方法。

子程序:

Void hanio(int n,char one,char two,char three)   /*定义hanio函数*/

{                                        /*n个盘子从one座借助two座,移动到three*/

Void move(char x,char y);                /*移动函数*/

                 If(n==1)

                             Mov(one,three);                   /*移动最大的到a>c*/

Else

    {

           Hanoin-1onethreetwo);   /*n-1个盘子从one借助three,移动到two*/

Moveonethree;     /*移动onethree  */

Hanoin-1,two,one,three; /*移动two到three*/

    }

}

从这两个例子中我们要学会两个思想

1.假设,这里的假设与米老师讲三个数求最大的数如出一辙,为什么那里我们学会了还会在这里绊倒呢?难道同一个坑非得让我们跳进去三次或者更多才能记得住这血淋淋的教训么?仔细想想,那是思想的惯性,没有经过大量训练的假设方法,常规的解题方法一直在占据着我们的大脑。大胆的假设真的让这个世界变得如此奇妙,这个问题需要执行2^64-1次方才能得到的结果,人一辈子都无法实现的效果通过假设就这样被合理的简化了……为此假设永远没有过去式,时刻都是进行时,掌握它,你的知识储备世界将变得无比奇妙。

2.舍弃当考虑把62个盘子看做一个时就不要去想上一步将63个看做一个的情况了,如果那样只能将自己带入混乱的深渊,想着从63跳变到62经历了多少步?产生不自信的局面,无形之中自己将自己囚禁了起来,怀疑自己的想法!最终胆怯退缩,自动退出。

  深刻理解到老师那句话:我们真的不敢去想象,假设需要勇气!为此我要时刻提醒自己,只要方法正确,科学,便义无反顾!

  评论这张
 
阅读(157)| 评论(109)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017