Python科学计算例题:斐波那契数列

题目:

编写一个程序,实现斐波那契数列


思路:

斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

在数学上,费波那契数列是以递归的方法来定义:

F0 = 0 (n=0)

F1 = 1 (n=1)

F(n) = F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)


解题:

求第n个斐波那契数
#for循环:
num = int(input(请输入数字:))
def fib1(n):
    a, b = 1, 1
    for j in range(n - 1):			# ♻️
        a, b = b, a + b
    return a
print(第{}个斐波那契数:{}.format(num, fib1(num)))


#递归
num = int(input(请输入数字:))
def fib2(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib2(n - 1) + fib2(n - 2)
print(第{}个斐波那契数:{}.format(num, fib2(num)))
求前n个或者指定个数的斐波那契数列
num = int(input(请输入数字:))
def fib2(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib2(n - 1) + fib2(n - 2)
print(第{}个斐波那契数:{}.format(num, fib2(num)))

# 直接使用上面提到的fibonacci函数
def fib1(n):
    a, b = 1, 1
    for j in range(n - 1):
        a, b = b, a + b
    return a

if num <= 0:
    print(无效的输入!)
else:
    print(前{}个斐波那契数为:.format(num))
    for i in range(1, num + 1):
        print({:8}.format(fib1(i)), end=)    # 格式化输出,每个结果占8位
        if i % 5 == 0:							 # 每输出5个,换一行
            print()
求大于某个数num的最小斐波那契数
num = int(input(请输入数字:))
def fib2(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib2(n - 1) + fib2(n - 2)
print(第{}个斐波那契数:{}.format(num, fib2(num)))

# 直接使用上面提到的fibonacci函数
def fib2(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib2(n - 1) + fib2(n - 2)


if num <= 0:
    print(无效的输入!)
else:
    for i in range(1, num + 1):
        if fib2(i) > num:
            print(大于{}的最小斐波那契数是: {}
它是数列中的第{}个数.format(num, fib2(i), i))
            break

扩展:

参考资料:


经验分享 程序员 微信小程序 职场和发展