详细方法请参考https://secweb.cs.odu.edu/~zeil/cs361/web/website/Lectures/recursionConversion/page/recursionConversion.html#d0e469。
基本模板:
T recursiveFoo (U param1, V param2) { U local1; V local2; ⋮ // code block 1 recursiveFoo (local1, local2); ⋮ // code block 2 recursiveFoo (param1, local2); ⋮ // code block 3 recursiveFoo (local1, param2); ⋮ // code block 4 }
becomes
T iterativeFoo (U param1, V param2) { U local1; V local2; FooStack stk; stk.push ({param1, param2, local1, local2, 1}); while (!stk.empty()) { // get parameters from stack FooStackInfo stkTop = stk.top(); param1 = stkTop.param1; param2 = stkTop.param2; local1 = stkTop.local1; local2 = stkTop.local2; stk.pop(); switch (stkTop.location) { case 1: ⋮ // code block 1 stk.push (