构造向量的递归方法

时间:2016-07-29 21:28:13

标签: python recursion

我有一个简单的递归函数:

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)

2 个答案:

答案 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)