阅读此斐波那契函数

偏执企鹅

我正在尝试通读以下代码,但是我遇到了一些困难:

def fib2(n): # return Fibonacci series up to n
    "Return a list containing the Fibonacci series up to n"
    result = []
    a, b = 0, 1

    while b < n:
        result.append(b)    # see below
        a, b = b, a+b

    return result

f100 = fib2(100)    # call it
f100                # write the result
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

我们从开始:

def fib2(n) 

据我了解,我们只是在创建定义,其中n是要指定的参数。然后我们继续:

result = [] 

在我看来,这似乎是要将输出发布到一个空列表中。从那里我们继续:

a, b = 0, 1 

我有点难以理解,为什么我们指定“ a = 0”和“ b = 1”?是否只是指定一个初始值,其值实际上并不重要?例如,我可以指定:

a, b = 2,3 

并在这一点上开始这个系列?如果我们再看一下这段代码:

while b < n: 
    result.append(b) 
    a, b = b, a+b
return result

我假设这只是在外观上满足函数目标的情况,以便向我们提供序列,直到B不小于n,所有这些都附加到空列表中。退货结果是否只是为了给我们打印输出?抱歉,我知道这是基本的,但是我对函数的理解有些困难,因此我认为我会选择一个非常基本的示例。

克里斯派索

def fib2(n)
你是正确的,它只是定义一个function名为fib2这需要n作为一个参数。

result = []
result 将是 type list

a, b = 0, 1
对于斐波那契数列,重要的是要了解该数列会增加n-1n-2将要创建的值(即如何1 1 2 3 5 8...创建)。

像这样看:
0 1 1 2 3 5 8...
a b....其中a为0,b为1,因此b是序列的开始

while b < n:
    result.append(b)
    a, b = b, a+b
return result

Python是一门很棒的语言,但可能会造成混淆。
a, b = b, a+b让我们研究一下。Python允许分配变量,这样您就可以在不影响初始值的情况下分配变量。

也就是说,如果a为0且b为1,a, b = b, a+b则将如下所示:

a将变为b,但将其存储为临时值1。重要的是要知道,b直到完成这一行代码后,a才真正被赋值
b将成为a+b0+1并将其存储为新值。

现在,如果b为2且a为1,让我们看看会发生什么:
a, b = b, a+b

a将成为b但直到代码行之后,因此a将成为2
bwill成为a+b,或者在这种情况下1+2如您所见,a首先重新分配实际上并不会更改a此表达式中的值挺整洁的!

考虑这种单行分配的一种更简单的方法是这样的:
a, b = b, a+b

a1 = b
b1 = a+b
a = a1
b = b1

是的,while b < n要检查是否满足while循环条件。一旦b不再小于n循环,循环将停止并result返回

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章