Почему этот оператор возврата выдает ошибку в этой рекурсивной функции python? - PullRequest
0 голосов
/ 15 июня 2019

Я практикуюсь с использованием рекурсивных функций, суммируя все элементы в списке.

Я сделал следующую функцию:

def list_sum_recursive(input_list):

    #base case, list is empty
    if input_list == []:
        print("empty")
        return

    #recursive case
    else:
        #grab the first element
        head = input_list[0]
        del input_list[0]
        #return the sum of the head plus the sum of the rest of the list
        return head + list_sum_recursive(input_list)

Однако эта функция выдает эту ошибку:

TypeError: неподдерживаемые типы операндов для +: 'int' и 'NoneType

Я разобрался с решением, сделав базовый вариант return 0 вместо просто return.

Но теперь мне любопытно, что на равнине return делал или не делал, чтобы выдать ошибку? И почему в Python, языке, который является довольно гибким и прощающим, такая проблема является проблемой?

Ответы [ 3 ]

0 голосов
/ 15 июня 2019

Просто хочу дать вам более Pythonic версию, надеюсь, вы не против.

def list_sum_recursive(input_list):

    #base case, list is empty
    if not input_list:
        return 0
    #return the sum of the head plus the sum of the rest of the list
    return input_list.pop(0) + list_sum_recursive(input_list)

print(list_sum_recursive([1,2,3]))
0 голосов
/ 15 июня 2019
def list_sum_recursive(input_list):

    #base case, list is empty
    if input_list == []:
        print("empty")
        return

    #recursive case
    else:
        #grab the first element
        head = input_list[0]
        del input_list[0]
        #return the sum of the head plus the sum of the rest of the list
        x=list_sum_recursive(input_list)
        if(x==None):
            return head + 0
        else:
            return head+x

возвращает 0 вместо ни одного.или вы можете сделать этот трюк.

0 голосов
/ 15 июня 2019

Как указано в комментариях, не возвращайте None в первом разделе.Вместо этого верните 0.

def list_sum_recursive(input_list):

    #base case, list is empty
    if input_list == []:
    #    print("empty")
        return 0

    #recursive case
    else:
        #grab the first element
        head = input_list[0]
        del input_list[0]
        #return the sum of the head plus the sum of the rest of the list
        return head + list_sum_recursive(input_list)

print(list_sum_recursive([1,2,3]))

Запуск программы дает нам

$ python test.py
6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...