在序列Python中更改迭代的起始值

时间:2012-12-02 07:17:20

标签: python function recursion iteration return-value

fibs = {0: 0, 1: 1}
def fib(n):
    if n in fibs: return fibs[n]
    if n % 2 == 0:
        fibs[n] = ((2 * fib((n / 2) - 1)) + fib(n / 2)) * fib(n / 2)
        return fibs[n]
    else:
        fibs[n] = (fib((n - 1) / 2) ** 2) + (fib((n+1) / 2) ** 2)
        return fibs[n]


def test(n):
    count = range(0,n)
    seq = []
    for i in count:
        seq.append(fib(i))
    return seq

print test(10)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

如何让它从1开始而不是0,所以结果是

[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

我尝试将fibs更改为{1:1,2:2},但它不起作用

2 个答案:

答案 0 :(得分:1)

您可以将count = range(0,n)替换为count = range(2,n + 2)以获得预期输出。 -

经由

尼古拉斯

def test(n):
    count = range(2,n+2)
    seq = []
    for i in count:
        seq.append(fib(i))
    return seq
谢谢你!

答案 1 :(得分:0)

你可以做其中两件事。假设您的结果存储在fibonacciNumbers中。 一个选项是切片列表:

fibonacciNumbers[2:]

第二个选项只是弹出fibonacciNumbers中的第一个元素。

for i in range(2):
    fibonacciNumbers.pop(0)