Convert Recursion to Iteration
Posted on October 1, 2019
Tags: induction
def recfac(n):
if n == 0:
return 1
else:
return n * recfac(n-1)
#assume r is fac(n-1)
#design facInc to equal fac(n)
#facInc = n * fac(n-1)
def facInc(n,r):
return n*r
#basecase is i == 0 then return r = 1
#facInc(i,r) is i * fac(i-1)
#when i == n, it becomes fac(n,r) = n * fac(n-1)
def fac3(n):
= 0
i = 1
r while(i != n):
= i + 1
i = facInc(i,r)
r return r
#due to associativity
def fac4(n):
= 0
i = 1
r = n
x while(i != x):
= facInc(r,x)
r = x-1
x return r
def foo(x):
if x > 1:
if x <= 50:
return 4
else:
return x * x + foo(x-7)
else:
return 20
def fooinc(i,r):
return i*i+r
def foo1(x):
= x
xa = None
r #first while finds the correct base case
while True:
if xa > 1:
if xa <= 50:
= 4
r break
else:
= xa - 7
xa else:
= 20
r break
#second while builds from the base to answer
while (xa != x):
= xa + 7
xa = fooinc(x,r)
r return r
def sqrlist(x):
if x == []:
return []
else:
return [(x[0]*x[0])] + sqrlist(x[1:])
#decrement is cdr or x[1:]
#x_o = x$y = cons(y,x)
def sqrlist0(x):
= x
xa = []
stack = None
r while True:
if xa == []:
= []
r break
else:
= [xa[0]] + stack
stack = xa[1:]
xa
while xa != x:
= [stack[0]] + xa
xa = stack[1:]
stack = [xa[0]*xa[0]]+r
r return r
= []
stack
5)
stack.append(= 1
base while stack != []:
= stack.pop()
arg if arg == 1:
break
= arg*base
base = arg - 1
IH
stack.append(IH)print(base)