当观看下面的 MIT 6.001 课程视频时,讲师在 28:00 将此算法标记为迭代。但是,在 30.27,他说这个算法和实际的“递归”算法都是递归的。
该函数正在使用基本情况调用自身,那么这次迭代情况如何?
private int iterativeSum(int x, int y)
{
System.out.println("x "+x+" y "+y);
if(x == 0)
{
return y;
}
return iterativeSum(--x, ++y);
}
讲师似乎更感兴趣的是如何执行,而不是如何执行code被写。这两者之间有很大的区别,但那是完全不同的对话(但值得注意的是,例如,某些语言会将递归编译为迭代)。
在这种情况下,它是迭代当您将整个状态保存在一处并重复处理该数据时。这是递归当你有一堆状态并将其添加到堆栈中时,最终将堆栈折叠回答案。
在讲师 31:00 的示例中,他将此视为迭代,此时有一张纸保存了迄今为止已完成工作的整个状态,任何人都可以接受它并最终得出最终答案。
在 32:20 的递归示例中,Joe 对问题有自己的注释,并且仅传递有关问题的一小部分的注释。这样,哈利就有了足够的信息来解决问题的一部分,但整个问题仍然需要乔保留自己的信息,以便在从哈利那里得到哈利的结果时处理这些结果。
你有一大堆人,更多的人被添加到堆栈中,直到其中一个人遇到一个简单到可以自己完成的问题,并且他可以立即返回他的答案,这意味着倒数第二个人现在有了一个更简单的问题出现问题,现在可以返回his答案,依此类推,直到整个堆栈的人重新塌陷为最后一个(第一个)人,然后给出最终答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)