[英]Python : How can I add something to a list recursively?
我已经阅读了很多关于这个问题的答案,但没有一个能解决我的问题:(
我写了一个递归 function 来显示斐波那契数,如下所示:
def fib(arg) :
if arg <= 0 :
print("Please choose a number greater than 0.")
elif arg == 1 :
return 0
elif arg == 2 :
return 1
else :
return fib(arg-1) + fib(arg-2)
现在我希望将结果添加到列表中。 数字必须以递归方式添加到列表中。 例如,我输入了一个 8 作为 arg,我希望返回一个包含这些数字的列表: [0,1,1,2,3,5,8,13] 通过递归添加,我的意思是像我上面所做的那样在其他部分。 我尝试了很多不同的东西,但没有一个是答案!
提前致谢!
假设您编写了一个 function,它返回一个给定数字的斐波那契数列。 然后要获得下一个斐波那契数,只需将列表的最后两个数相加即可。 您可以从索引-1
和-2
中获取它们。
def fiblist(n):
if n<=0:
raise ValueError("Number should be greater than zero.")
if n==1:
return [0]
if n==2:
return [0,1]
fibs = fiblist(n-1)
next_value = fibs[-1] + fibs[-2]
return fibs + [next_value]
对于前 2 个索引,您可以保存值,然后对于所有值,您可以将值设为fib_list[current_index] = fib_list[current_index-1] + fib_list[current_index-2]
完整代码:
def fib(arg, fib_list):
if arg <= 0:
fib_list.append(0)
elif arg == 1:
fib_list.append(1)
else:
fib_list.append(fib_list[-2] + fib_list[-1])
return fib_list
n = int(input("Enter number of elements: "))
fib_list = []
for i in range(n):
fib(i, fib_list)
print(fib_list)
Output
[0, 1, 1, 2, 3, 5, 8, 13]
这行得通吗?
def fib(arg):
if arg <= 0:
print("Please choose a number greater than 0.")
elif arg == 1:
return [0]
elif arg == 2:
return [0, 1]
l = fib(arg - 1)
l.append(l[-2] + l[-1])
return l
您可以对 function 进行小改动以返回数组而不是返回数字,并且在每次递归调用时,将 append 调用到上一个列表。 像这样的东西会很好用,
def fib(arg) :
if arg <= 0 :
raise ValueError("Please choose a number greater than 0.")
elif arg == 1 :
return [0]
elif arg == 2 :
return [0, 1]
previous = fib(arg - 1)
*_, secondlast, last = previous
return previous + [secondlast + last]
print(fib(8)) 给出你期望的结果 [0, 1, 1, 2, 3, 5, 8, 13]
如果可能的话,我是单点出口的粉丝,所以我相应地设计了我的解决方案。 我意识到 Python 具有完美的 function range()
来合并案例1
和2
。 最后,我尝试维护您的 API:
import sys
def fib(arg):
sequence = []
if arg <= 0:
print("Please choose a number greater than 0.", file=sys.stderr)
elif 1 <= arg <= 2:
sequence += range(arg)
else:
sequence += fib(arg - 1)
sequence.append(sum(sequence[-2:]))
return sequence
print(fib(13))
OUTPUT
> python3 test.py
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.