2016-07-29 2 views
-4

У меня есть простой рекурсивной функции:Рекурсивный метод построения вектора

def subTree(z,sublevels): 

    if(z < sublevels): 
     print "from z = ", z, " to z = ", z+1 
     subTree(z+1,sublevels) 
    else: 
     print "z = ", z, " !" 

это просто идет от г до подуровней, например:

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?

(в данном примере это будет: г [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

спасибо за THHE редактировать JON – darkpirate

ответ

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' 
+0

очень подробный ответ, одобрен! – darkpirate

0

Этот код изменения "" список [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) 
+0

Это то, что я искал для ty – darkpirate

+0

, но разве это немного лишнее? – darkpirate

+0

Не могли бы вы рассказать мне разницу между вашим кодом и тем, который я редактировал? – darkpirate

Смежные вопросы