Sta*_*cky 2 java iteration recursion scheme sicp
在观看下面的 MIT 6.001 课程视频时,教师在 28:00 将此算法标记为迭代。但是,在 30.27,他说这个算法和实际的“递归”算法都是递归的。该函数使用基本情况调用自身,那么这个迭代如何?
https://www.youtube.com/watch?v=dlbMuv-jix8&list=PLE18841CABEA24090&index=2
private int iterativeSum(int x, int y)
{
System.out.println("x "+x+" y "+y);
if(x == 0)
{
return y;
}
return iterativeSum(--x, ++y);
}
Run Code Online (Sandbox Code Playgroud)
教师似乎更感兴趣的是它是如何执行的,而不是代码是如何编写的。这两者之间有很大的不同,但这是完全不同的对话(但值得注意的是,作为示例,某些语言会将递归编译为迭代)。
在这种情况下, 当您将整个状态保存在一个地方并重复处理该数据时,就是迭代。当您拥有一堆状态并添加到堆栈中,然后最终将堆栈折叠回答案时,这是递归。
在 31:00 教师的例子中,他将这显示为迭代,当有一张纸保存到目前为止完成的工作的整个状态时,任何人都可以拿走它并最终产生最终答案。
在 32:20 的递归示例中,Joe 对问题有自己的注释,并且只传递关于问题的一个子部分的注释。哈利然后有足够的信息来解决他的问题,但是整个问题仍然需要乔保留他自己的信息,以便在他从哈利那里得到结果时处理哈利的结果。
你有一大堆人,越来越多的人被添加到堆栈中,直到其中一个人有一个简单到可以自己解决的问题,他可以马上回复他的答案,这意味着倒数第二个现在有一个更简单的问题问题,现在可以返回他的答案,依此类推,直到整个人群折叠回最后一个(第一个)然后产生最终答案的人。
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |