Я обычно начинаю с базового варианта (у каждой рекурсивной функции есть один) и работаю в обратном направлении, сохраняя результаты в кеш (массив или хеш-таблица), если необходимо.
Ваша рекурсивная функция решает проблему, решая меньшие подзадачи и используя их для решения большей проблемы. Каждая подзадача также разбивается дальше и так до тех пор, пока эта подзадача не станет настолько маленькой, что решение будет тривиальным (т.е. базовый случай).
Идея состоит в том, чтобы начать с базового варианта (или базовых вариантов) и использовать его для построения решения для более крупных случаев, а затем использовать их для построения еще более крупных случаев и т. Д., Пока вся проблема не будет решена. Это не требует стека, и может быть сделано с циклами.
Простой пример (на Python):
#recursive version
def fib(n):
if n==0 or n==1:
return n
else:
return fib(n-1)+fib(n-2)
#iterative version
def fib2(n):
if n==0 or n==1:
return n
prev1,prev2=0,1 # start from the base case
for i in xrange(n):
cur=prev1+prev2 #build the solution for the next case using the previous solutions
prev1,prev2=cur,prev1
return cur