# 第7期-斐波那契数列

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。

斐波那契数列指的是这样一个数列:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 ……
这个数列从第3项开始,每一项都等于前两项之和。

试用Python代码输出斐波那契数列前20项~

# 2 解题思路

用Python代码输出斐波那契数列,需把握住数列的特点:从第3项开始,每一项都等于前两项之和
因此我们可以使用递归、for循环等方法实现~

# 3 解题方法

# 方法一:递归

def fib1(n):
    if n == 1 or n == 2:
        return 1
    return fib1(n - 1) + fib1(n - 2)

for i in range(1, 21):
    print(fib1(i), end=' ')
1
2
3
4
5
6
7

第1行: 定义函数fib1,传入参数n
第2-4行: 用if...else语句进行判断,由于该数列从第三项开始,每个数的值为其前两个数之和,所以当n == 1或 n == 2时,返回值为1,这也是递归的结束条件;否则返回值为前两个数的和,即fib1(n-1) +fib1(n-2)
第6行: 用for语句遍历1-20的整数
第7行: 为参数n赋值为i, 并用end 将print输出到同一行并以空格结尾

递归函数的用法我们在第2期-求100以内奇数和 (opens new window)中有讲,大家可以查看哦~

# 方法二:for循环

def fib2(n):
    a, b = 0, 1
    for i in range(n + 1):
        a, b = b, a + b
    return a

for i in range(20):
    print(fib2(i), end=' ')
1
2
3
4
5
6
7
8

第1行: 定义函数fib2,传入参数n
第2行: 为a,b分别赋值为0和1
第3行: 用for循环遍历前n项的整数
第4行: 由于该数列从第三项开始,每个数的值为其前两个数之和,可写成a, b = b, a + b。这个式子中,右边的表达式会在赋值变动之前执行,即先执行右边,如第一次循环得到b-->1,a+b --> 0+1 然后再执行赋值 a,b =1,0+1,所以执行完这条后a=1,b=1
第5行: 返回a的值
第6行: 用for语句遍历前20的整数
第7行: 为参数n赋值为i, 并用end将print输出到同一行并以空格结尾

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM