我只是想知道在需要返回值时是否可以用显式堆栈替换递归,并将它们进行比较以找到最佳解决方案(如动态编程)?
所以类似(它没有做任何事情,只是一个例子):
int resursiveFunction (int state) {
if (known[state]) return cache[state];
if (state == MAX_STATE) return 0;
int max = 0;
for (int i = 0 ; i < 5; i++) {
int points = curPoints (state) + recursiveFunction (state+i);
if (points > max) max = points;
}
known[state] = true;
cache[state] = max;
return max;
}
答案 0 :(得分:3)
是。这是可能的。
根据需要简单地推送和弹出。递归只是创建一个'隐式堆栈'。你也可以解开TCO'able递归函数。
您可能会发现Stacks and Recursion Elimination(这是一门课程)很有用。它包括消除(左递归)以及仿真(堆栈)。