我有一个可变的Fibonacci函数,它会改变列表,以便将该列表作为fib序列返回。我想做同样的事情......但是列表(或者在这种情况下是元组)不应该改变。返回仍然必须发送整个列表,如何实现它,而不使用递归。
例)如果x = 6 ......列表应返回{1,1,2,3,5,8}
我在python 3.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
答案 0 :(得分:0)
您可以为每个新元素创建一个新列表。
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]
答案 1 :(得分:0)
如果我通过“不使用递归的函数方法”理解你的意思,看起来输入参数应该是前n个Fibonacci数的列表,输出应该是第一个n +的列表1个斐波纳契数。如果这是正确的,那么你可以使用
def fibonacci(fib):
if not fib: return [1]
if len(fib) == 1: return [1,1]
return fib + [fib[-1]+fib[-2]]