【发布时间】:2013-04-15 13:37:04
【问题描述】:
一些伪代码:
func F(int x. int y, array p){
p[x] = 1;
if (x<=y){
for each item in getItems(x,p){
p = F(item,y,p);
}
}
return p;
}
getItems() 返回一个基于 x 和 p 的数字数组,对于这个问题并不重要,但它会返回一些高于和低于 x 的数字。然而,这意味着如果 x 太大,那么我会炸毁递归堆栈,因为它会深入到 x 之下。
如何将其更改为迭代?
【问题讨论】:
-
因为它是你的程序将进入无限循环(如果你使用递归或迭代无关紧要)。先搞清楚逻辑。
-
它不会进入无限循环。它适用于较小的范围。问题是边界太大。
-
请显示
getItems的简化版。它如何依赖于p? -
一个愚蠢的问题:你是按值传递和返回数组吗?
-
没关系;它只返回 x 以下的几个数字和 x 以上的几个数字,基于 p 的哪些元素已经被标记(这与质数有关,所以如果这就是你问的原因,这里没有很好的模式。这不是简单的 clean 函数,但重写 F) nm: 否,通过引用不需要它
标签: algorithm recursion iteration