如何将这个Python可变函数转换为不可变函数?

2024-09-26 18:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个可变的Fibonacci函数,它改变了一个列表,以fib序列的形式返回该列表。我也想做同样的事。。。但是列表(在本例中是元组)不应该更改。返回仍然要发送整个列表,我如何实现这一点,而不使用递归。在

例如,如果x=6。。。列表应返回{1,1,2,3,5,8}

我用的是python3.5

这是我的代码:

def mutableFib(x):
result = []
for y in range(0,x):
    if y < 2:
        result.append(1)
    else:
        last = result[y - 1]
        previous = result[y - 2]
        result.append(last + previous) //result is being changed
return result

Tags: 函数代码列表def序列result形式fibonacci
2条回答

您可以为每个新元素创建一个新列表。在

def fibonacci(x):
    list_of_fibonaccis = []
    for y in range(0,x):
        if y < 2:
            temp_fibonacci = [1] * (y + 1)
        else:
            last = list_of_fibonaccis[y-1][-1]
            previous = list_of_fibonaccis[y-1][-2]
            temp_fibonacci = list_of_fibonaccis[y-1] + [last + previous]
        list_of_fibonaccis.append(temp_fibonacci)
    return list_of_fibonaccis[-1]

如果我理解你所说的“不使用递归的函数方法”的意思,那么输入参数应该是前n个Fibonacci数的列表,而输出应该是前n+1个Fibonacci数的列表。如果这是正确的,那么您可以使用

def fibonacci(fib):
    if not fib: return [1]
    if len(fib) == 1: return [1,1]
    return fib + [fib[-1]+fib[-2]]

相关问题 更多 >

    热门问题