繁体   English   中英

Python:如何递归地向列表中添加内容?

[英]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()来合并案例12 最后,我尝试维护您的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM