我有一个简单的递归函数:
def subTree(z,sublevels):
if(z < sublevels):
print "from z = ", z, " to z = ", z+1
subTree(z+1,sublevels)
else:
print "z = ", z, " !"
这简单地从z到sublevels,例如:
subTree(2, 6)
from z = 2 to z = 3
from z = 3 to z = 4
from z = 4 to z = 5
from z = 5 to z = 6
z = 6 !
现在,我该怎么做才能调用函数返回一个有序的z?
向量(在例子中它将是:z [2,3,4,5,6])
来自keiv代码:
def subTree(z,sublevels,a):
a.append(z)
if(z < sublevels):
subTree(z+1,sublevels,a)
a=[]
subTree(2,6,a)
答案 0 :(得分:1)
我与keiv.fly分享了一个返回结果的递归函数的偏见:
def subTree(z, sublevels):
result = [z]
if z < sublevels:
result += subTree(z + 1, sublevels)
return result
a = subTree(2, 6)
它可以降低到效率稍低的单线:
def subTree(z, sublevels):
return [z] + (subTree(z + 1, sublevels) if z < sublevels else [])
并且可以修改它们以返回元组而不是列表:
def subTree(z, sublevels):
return (z,) + (subTree(z + 1, sublevels) if z < sublevels else ())
如果需要,我们可以轻松颠倒结果的顺序:
def subTree(z, sublevels):
return (subTree(z + 1, sublevels) if z < sublevels else ()) + (z,)
返回:
(6, 5, 4, 3, 2)
如果你想将数组传递给函数,那么我建议你仍然把它作为一个值返回如下:
def subTree(z, sublevels, array):
array += type(array)([z])
if z < sublevels:
array = subTree(z + 1, sublevels, array)
return array
通过执行type(array)([z])
和显式返回,我们可以使此函数适用于多种数据类型:
a = []
a = subTree(2, 6, a)
print(a)
a = ()
a = subTree(2, 6, a)
print(a)
a = b""
a = subTree(ord('2'), ord('6'), a)
print(a)
输出:
[2, 3, 4, 5, 6]
(2, 3, 4, 5, 6)
b'23456'
答案 1 :(得分:0)
此代码将“a”列表更改为[2,3,4,5,6]
def subTree(z,sublevels,a):
a.append(z)
if(z < sublevels):
subTree(z+1,sublevels,a)
a=[]
subTree(2,6,a)