/ / ¿Cómo escribir una función que agregue números en una lista llamándose a sí misma? - python, lista, recursion, suma

¿Cómo escribir una función que agregue números en una lista llamándose a sí misma? - python, lista, recursion, suma

Estoy tratando de escribir una función que suma todos los números en una lista pero llamándome a sí misma en Python. Aquí hay un ejemplo de lo que quiero decir:

def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)

¿Cómo usarías esto para encontrar la suma de una lista?

Respuestas

0 para la respuesta № 1
nums = [1, 3, 2, 8, 9]
def rec_sum(nums):
if not nums: return 0
return nums[0] + rec_sum(nums[1:])

>>> rec_sum(nums)
23

Incluso podrías hacer esto en una línea:

def rec_sum(nums):
return nums[0] + rec_sum(nums[1:]) if nums else 0

Para evitar que se hagan todas las copias superficiales de la lista. nums[1:] En cada llamada puedes hacer algo más eficiente:

def rec_sum(nums, i=0):
if i >= len(nums): return 0
return nums[i] + rec_sum(nums, i+1)

También es divertido usar el Y-Combinador

>>> Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
>>> rec_sum = lambda f: lambda nums: nums[0] + f(nums[1:]) if nums else 0
>>> Y(rec_sum)(nums)
23