江湖散人 发表于 2021-3-23 21:31:18

斐波拉契数列问题

def fblj(n):
    a = 1
    b = 1
    c = 1
    while (n-2)> 0:
      c = a + b
      a = b
      b = c
      n -= 1
    return c


a = int(input("输入一个整数:"))
b = fblj(a)
print("%d的斐波拉契数列是%d"%(a,b))


这里边的 a,b c 为什么都定义为1,而不是其他数值?

阴阳神万物主 发表于 2021-3-23 21:43:07

c的值你随便换,这里给1只是为了整齐、美观

Daniel_Zhang 发表于 2021-3-24 01:06:41

斐波那契数列如下:

1、1、2、3、5、8、13、21、34

a你可以理解为左值,b为右值

所以一开始 a = 1 b = 1
然后 b 的值变为后一位的值,也就是 2,a的值变为b的值,也就是 1

c 的话,你c = 1只是定义 c 并初始化,有没有都无所谓,c = a + b这里就会定义

江湖散人 发表于 2021-3-24 10:04:59

Daniel_Zhang 发表于 2021-3-24 01:06
斐波那契数列如下:

1、1、2、3、5、8、13、21、34


谢谢,我明白 了

Loganable 发表于 2021-3-24 10:14:41

因为斐波那契数列前两项都为1,而函数是以c作为输出结果的,所以当n<3的时候函数不会进入while循环,此时输出的结果必然是斐波那契数列的前两项中的一个,也就是1,所以c必须要初始化为1。

Loganable 发表于 2021-3-24 10:35:24

Daniel_Zhang 发表于 2021-3-24 01:06
斐波那契数列如下:

1、1、2、3、5、8、13、21、34


就这个程序而言,c必须事先定义并初始化为1的,否则当n等于1或2的时候,程序会报错或者输出的值不是斐波那契数列。

python初学者021 发表于 2021-3-24 11:11:54

我的代码是这样的

#!/usr/bin/python3

def fblj(num):
        if num == 1:
                return

        if num == 2:
                return

        counter = 2
        return_list =

        while counter<= num:
                return_list.append(int(return_list + return_list))
                counter += 1

        return return_list

num = int(input("Please input a number:"))

fblj_list = fblj(num)

print(fblj_list)


结果:
Please input a number:20

Daniel_Zhang 发表于 2021-3-24 15:33:26

Loganable 发表于 2021-3-24 10:35
就这个程序而言,c必须事先定义并初始化为1的,否则当n等于1或2的时候,程序会报错或者输出的值不是斐波 ...

{:10_248:}有道理吼

没仔细看他的程序构造{:10_336:}
页: [1]
查看完整版本: 斐波拉契数列问题