展开全部
这种问题不明白为什2113么要用递归5261来做, Python中的递归如果不做特殊处理, 你这输4102入的数字大一点就会1653抛异常.import sys
class TailRecurseException:
def __init__(self, args, kwargs):
self.args = args
self.kwargs = kwargs
def tail_call_optimized(g):
def func(*args, **kwargs):
f = sys._getframe()
if f.f_back and f.f_back.f_back and f.f_back.f_back.f_code == f.f_code:
raise TailRecurseException(args, kwargs)
else:
while 1:
try:
return g(*args, **kwargs)
except TailRecurseException, e:
args = e.args
kwargs = e.kwargs
func.__doc__ = g.__doc__
return func
@tail_call_optimized
def fun(n):
if n == 2:
sys.stdout.write('\n')
return
elif n % 2 == 1:
n = n - 1
else:
n = n - 2
sys.stdout.write('{} '.format(n))
fun(n)
N = int(sys.stdin.readline())
fun(N)