Python 思维练习-9: 打印100以内的 斐波那契数列 + 打印斐波那契数列的第 X 项

本文介绍了如何使用Python通过for循环和迭代思维来打印100以内的斐波那契数列,并讲解了如何计算斐波那契数列的第X项,涉及到赋值和break的使用技巧。

打印100以内的 斐波那契数列

i = 1
j = 0
for a in range(101):
    number = i + j
    i = j
    j = number
    if number > 100:
        break
    else
<think>我们有两个任务: 1. 输出100以内斐波那契数列(即数列中所有值不超过100) 2. 输出长度为20的斐波那契数列(即输出前20斐波那契数列的定义: F0 = 0, F1 = 1, F2 = 1, 且当n>=2时,F(n) = F(n-1) + F(n-2) 但注意,有时斐波那契数列也从F1=1, F2=1开始,即前两都是1。根据引用[1]和引用[2]的示例,它们都从1开始(没有包括0)。因此,我们这里也采用从1开始: 第1:1 第2:1 第3:2 第4:3 第5:5 ... 对于第一个任务:输出100以内斐波那契数列。 我们可以使用循环来生成斐波那契数列,当下一大于100时停止。 对于第二个任务:输出长度为20的斐波那契数列。 我们生成前20即可。 注意:由于两个任务要求不同,我们需要分别实现。 但我们可以写一个函数来生成斐波那契数列,然后根据条件截取。 然而,由于第一个任务是按值范围限制,第二个任务是按项数限制,我们可以分别用两个循环来实现。 但为了代码清晰,我们可以分别写两个函数,或者在一个程序中分别实现两个任务。 方案: 1. 生成100以内斐波那契数列: 初始化:a = 1, b = 1 将a加入列表,然后计算下一c = a + b,然后更新a=b, b=c,直到b>100(注意,因为a是前一,b是当前,我们循环中每次生成下一,所以当下一大于100时,我们就不再添加) 但注意:第一个数a=1,第二个数b=1,然后第三个数就是a+b=2,以此类推。 具体步骤: a, b = 0, 1 但是这样第一个数就是0?我们不希望包括0。所以按照引用[2]的方法:a, b = 1, 1 然后循环条件:只要a<=100,我们就输出a(或者加入列表),然后更新: a, b = b, a+b 这样,第一:a=1,输出1,然后更新:a=1, b=1+1=2 第二:a=1,输出1,更新:a=2, b=1+2=3 第三:a=2,输出2,更新:a=3, b=2+3=5 ... 直到a>100时停止循环。 但是这样会漏掉最后一吗?注意,当我们输出a时,a是当前,当a>100时,我们就不输出了,所以不会包括超过100。 2. 生成长度为20的斐波那契数列: 同样用循环,但这次我们计数,从0到19(共20次)。 因此,我们可以分别用两个循环来实现。 代码实现: 首先,输出100以内斐波那契数列: a, b = 1, 1 while a <= 100: print(a, end=&#39; &#39;) a, b = b, a+b 但是注意,这样在循环体内先输出a,然后更新。这样不会漏掉第一,最后一超过100的不会输出。 然后,输出前20: a, b = 1, 1 for i in range(20): print(a, end=&#39; &#39;) a, b = b, a+b 然而,这样两个循环会改变a,b的值,所以我们可以分开写,或者用函数封装。 我们也可以写一个生成斐波那契数列的生成器函数,然后分别按条件取,但这里为了简单,我们直接写两段代码。 另外,注意输出格式要求:题目要求中文回答,但输出代码部分无需翻译。 我们分别输出两个数列。 注意:第二个任务要求长度为20,所以我们要输出20个数字。 代码实现如下: </think>### Python实现斐波那契数列输出 根据您的需求,我将分别实现两个功能: 1. 输出**100以内**的斐波那契数列(所有数值不超过100) 2. 输出**长度为20**的斐波那契数列(前20) #### 解决方案: ```python # 输出100以内斐波那契数列 def fib_under_100(): a, b = 1, 1 result = [] while a <= 100: result.append(a) a, b = b, a + b # 更新数列 return result # 输出长度为20的斐波那契数列 def fib_length_20(): a, b = 1, 1 result = [] for _ in range(20): result.append(a) a, b = b, a + b return result # 主程序 if __name__ == "__main__": print("100以内斐波那契数列:") print(fib_under_100()) print("\n前20斐波那契数列:") print(fib_length_20()) ``` #### 代码说明: 1. **100以内数列**: - 使用`while`循环持续生成数列 -数列大于100时停止 - 输出结果:`[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]` 2. **前20项数列**: - 使用`for`循环精确生成20 - 输出结果(前5示例):`[1, 1, 2, 3, 5, ...]`(共20个数字) #### 运行结果: ``` 100以内斐波那契数列: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] 前20斐波那契数列: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] ``` #### 关键点: - 使用**并行赋值**`a, b = b, a + b`避免中间变量 - 时间复杂度:$O(n)$(线性复杂度) - 空间复杂度:$O(n)$(存储结果所需空间) - 斐波那契数列定义:$F_1=1, F_2=1, F_n=F_{n-1}+F_{n-2} (n \geq 3)$
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值