2015-08-17 2 views
0

У меня есть функция, которая изменяет список, однако он ничего не возвращает. Это длинная функция, но для примера можно привести следующую проблему. Почему он ничего не возвращает?Рекурсивная функция хвоста python не возвращается

def inventedfunction(list1): 
    list2=list1[:-1] 
    if len(list2)!=1: 
     inventedfunction(list2) 
    else: 
     return list2 
+1

Потому что 'inventedfunction (list2)' означает 'вызов изобретенной функции на list2, но отбросить его результат'. Я думаю, вам нужно «return inventedfunction (list2)» – Alik

+0

Как я мог избежать этой проблемы, предполагая, что мне нужно использовать рекурсию в этом примере? – user2246905

ответ

2

Заменить inventedfunction(list2) с return inventedfunction(list2). Если вы просто вызываете его без оператора return, результат будет выброшен.

Рабочий код:

def inventedfunction(list1): 
    list2=list1[:-1] 
    if len(list2)!=1: 
     return inventedfunction(list2) 
    else: 
     return list2 
+0

Спасибо. Как насчет того, нужно ли мне после запуска inventedfucntion (somelist) изменить список ввода (somelist)? – user2246905

+0

«somelist = inventedfunction (somelist)» –

0

Вы не сказали, что эта функция должна делать, поэтому я предполагаю, что «inventedfunction» означает «перевернутую функцию». Даже если это неверно, идея такая же. Если это не так, или вы не понимаете, тогда отправьте сообщение с дополнительной информацией.

Вы не поймаете никаких возвратов и ничего не возвращаете (Нет), если len (list2)! = 1. Вам также понадобится создать второй список, чтобы удерживать числа, удаленные из списка, отправленного к функции и возвратить обновленный список также в соответствии с тем, как ваш код структурирован.

def inventedfunction(list1, new_list=[]): 
    ## at the least add print statements so you know what is happening 
    print new_list, "----->", list1 
    list2=list1[:-1] 
    new_list.append(list1[-1]) ## append item removed from list1 --> list2 
    if len(list2): 
     new_list, list2=inventedfunction(list2) 
    return new_list, list2 ## both updated lists returned 

print inventedfunction([1, 2, 3, 4, 5])