【发布时间】:2014-12-10 22:18:19
【问题描述】:
我想使用堆栈和循环将以下程序转换为非递归代码:
void write(int n) {
if (n>0) {
write(n-1);
cout << n << " ";
write(n-1);
}
}
这是我正在使用的代码,但目前不起作用,我不知道为什么:
stack<int> S;
S.push(n);
while (not S.empty()) {
int k = S.top();
S.pop()
if (k>0) {
S.push(k-1);
cout<<k<<" ";
S.push(k-1);
}
}
它不起作用,我不知道如何模拟该递归。我认为将等效的递归调用推入堆栈就足够了。
谢谢
【问题讨论】:
-
避免双重
S.push(k-1); -
我需要两次推送,因为有 2 个记录。调用 write 函数,否则它只会写入从 n 到 1 的数字。
-
@DieterLücking 在递归中有双重调用,所以不是问题
-
@Ruben 你的假设是错误的,如果只有一个电话就等价了
-
那怎么一通电话呢?