用显式堆栈替换递归(带有返回值)

时间:2010-10-23 22:47:35

标签: recursion stack

我只是想知道在需要返回值时是否可以用显式堆栈替换递归,并将它们进行比较以找到最佳解决方案(如动态编程)?

所以类似(它没有做任何事情,只是一个例子):

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; 

}

1 个答案:

答案 0 :(得分:3)

是。这是可能的。

根据需要简单地推送和弹出。递归只是创建一个'隐式堆栈'。你也可以解开TCO'able递归函数。

您可能会发现Stacks and Recursion Elimination(这是一门课程)很有用。它包括消除(左递归)以及仿真(堆栈)。