发表于: 2017-08-25 23:44:02
2 943
【今日完成】
今天主要是准备任务五的提交,所以把整个项目梳理了一遍,重要的地方加上了注释。相当于是把代码精心装扮了一下。发现有些地方有点冗杂,也把能简化的简化了,一些多余的代码删除了。理清了每一行代码的逻辑。争取明天能通过师兄的审核。
完成代码的修正后,看了一下计算机的基本知识(非科班出身,这点比较欠缺)
理清楚了递归与迭代的区别:
递归是一个函数多次调用自己,当调用到某个时刻时,开始收敛。
就比如这个六的阶乘,
第一步是调用6*5的阶乘,
第二步是调用6*5*4的阶乘。
以此推类,最后调用到1的阶乘,此时1的阶乘就是1,那么此时展开到最大,再开始回收。
如果把“阶乘”看成一个函数,这里是在不断调用自己,只不过参数变了而已,
一开始是6!,后面是6*5!,再后面是6*5*4!。。。
最大展开时是6*5*4*3*2*1!,此时1!就是1。
所以变成了6*5*4*3*2*1,然后现在是从右往左计算,
第一步是6*5*4*3*2,
第二步是6*5*4*6,
以此推类,
最后得到结果。
而迭代则不会展开式子。迭代会定义几个参数:1,现在的值,2、计数器、3最大的界限值
这里式子的意思是,当计数器大于界限值时,会返回结果。
从上面两个式子可以看出迭代与递归的区别:
一、递归的计算式是会增长的,而迭代不会。
所以使用递归时要谨慎,试想如果递归个100000!,电脑会使用很长的计算器,一些性能不好的电脑会直接死机。
二、迭代的三个定义完整表述了一个完整描述。
我们是可以在迭代的任何时候停下来的,如果要继续,则提供三个参数,程序依旧会执行。
而递归不行,递归的信息是隐藏的,电脑不会告诉你它已经计算到了哪一步,是在展开式子还是已经在回收式子了。所以如果暂停了递归,那么再开始,又得重头再来一遍。
【今日收获】
搞明白了递归与迭代的区别,并且完善了代码。
【遇到问题】
暂无
【明日计划】
完成任务五!
【任务进度】
无延期风险,明天应该可以完成
http://task.ptteng.com/zentao/project-burn-268.html
评论