我想用foo
替换我的函数foo2
(非复原),但foo2
工作不正确。
foo2
出了什么问题?
def foo(n, k=0,s=0):
if k < n:
for i in xrange(k==0,10):
foo(n, k+1, 10*s + i)
else:
print s,
def foo2(n):
s=0
for k in xrange(n):
st = s
for i in xrange(k==0, 10):
st = 10* st + i
print st
foo(3)
foo2(3)
更新
如果我将10*s + i
替换为s + i**3
,我该如何重写呢?
答案 0 :(得分:3)
foo
打印10 n-1 ~10 n -1;迭代xrange(10**(n-1), 10**n)
。
def foo2(n):
for s in xrange(10**(n-1), 10**n):
print s,
以下是使用堆栈的递归函数的转换:
def foo2(n):
stack = [(0, 0)] # corresponding to (..., k=0, s=0)
while stack:
k, s = stack.pop(0)
if k < n:
for i in xrange(k==0, 10):
stack.append((k+1, 10*s + i))
else:
print s,
注意要实现严格等效的迭代版本,还应该推送迭代器(xrange...
);在循环中一次只消耗一个项目。