末尾再帰の復習

  • 対策前
def func(x):
  if x == 1:
    return 1
  else:
    return x * (x - 1)

for cnt in range(1, 5):
  print func(cnt)
  • 対策後
def func(x, a):
  if x == 1:
    return a
  else:
    return func(x - 1, x * a)

def exec_func(x):
  return func(x, 1)

for cnt in range(1, 5):
  print exec_func(cnt)

こんな感じ。多少回りくどくなるが。
あと、関数の意味がわかりにくくなるかも。
(都合により、実際には動かしていない。)