鱼C论坛

 找回密码
 立即注册
查看: 2678|回复: 10

关于斐波那契数列的问题

[复制链接]
发表于 2017-11-24 19:05:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
0.老师让我们用Python语言编写斐波那契数列,1000以内。
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多•斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
老师给我们的代码如下:
  1. a,b=0,1
  2. while a <1000:
  3.     print(a,end=',')
  4.     a,b=b,a+b

复制代码
运行后结果如下:
TIM截图20171124190526.png

我不知道这个代码是如何执行的,前面的两个1是怎么出现的,我知道第一个1是当第二次循环时a就等于1,但是后面一次怎么也是1呢?不是应该是2吗
求解~

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-24 19:16:12 | 显示全部楼层
斐波那契数列是,第3个数是前两个数的和
你最初始的两个数定义的是0,1,第3个数就是0+1=1,第4个数是1+1=2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-24 19:18:17 | 显示全部楼层
ooxx7788 发表于 2017-11-24 19:16
斐波那契数列是,第3个数是前两个数的和
你最初始的两个数定义的是0,1,第3个数就是0+1=1,第4个数是1+1=2 ...

第3个数是前两个数的和这个我知道,我就是不知道程序中是怎么运行的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-24 19:42:53 From FishC Mobile | 显示全部楼层
因为循环过程先打印了a,再修改的a,初始值为0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-24 20:24:23 | 显示全部楼层
斐波那契数列的特点就是 X[i+1]=X[i-1]+X[i] ,你这程序中a初值为0表示初始小兔子数为0,b初值为1表示初始成年兔子数为1(也可能是当前总兔子数),进入循环后下一阶段小兔子数就等于当前成年兔子数,所以将当前成年兔子数赋给a,下一阶段成年兔子数等于当前成年兔子数与小兔子的和故a+b

不知道解释清楚没,反正我看着是挺乱 ,不懂的话可以去看看斐波那契数列的百科,代入实例问题好理解一点
2017-11-24_201257.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-24 20:39:13 | 显示全部楼层
你是石乐志
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-24 21:38:10 | 显示全部楼层
先赋值a=0,b=1
进入循环
打印a  =0
赋值a=1,b=0+1=1
循环 打印a=1
赋值  a=b=1,b=a+b=2
循环 打印a=1
赋值 a,b=b,a+b=2,3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 16:18:12 | 显示全部楼层
关于fibonacci 有三种我已知的算法, 1. 递归 , 2. 就是楼主用的迭代, 3. 需要用的线性代数的知识, 详情见
http://www.cnblogs.com/python27/archive/2011/11/25/2261980.html
,
楼主应该看不懂的是
a,b=b,a+b
他的实质就是元组之间的赋值,
相当于分别将b , a + b 赋值给a, b;
而在python 也可以这样交换n个变量的值:如 2 个
a, b = b, a;
这都是元组元素的赋值, 注意的是一一对应
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-26 16:58:07 | 显示全部楼层
Da_Ye 发表于 2017-11-26 16:18
关于fibonacci 有三种我已知的算法, 1. 递归 , 2. 就是楼主用的迭代, 3. 需要用的线性代数的知识, 详情见,
...
  1. a,b=0,1
  2. while a <1000:
  3.     print(a,end=',')
  4.     a=b
  5.     b=a+b
复制代码

我把a,b=b,a+b分开写结果完全不一样,这就是元组之间的赋值吗,元组我还没有学不是很懂。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 18:21:03 | 显示全部楼层
像番茄加两个蛋 发表于 2017-11-26 16:58
我把a,b=b,a+b分开写结果完全不一样,这就是元组之间的赋值吗,元组我还没有学不是很懂。

当然不一样,
a = b
b  =  a + b,
第一个语句执行完之后, 变量a 的值 已经是b 的值,
而第二个语句, 从逻辑上就成了 b = b(虽然是a, 但已经是b的值了) + b
结果当然大相径庭,
如果分开的话就必须有一个临时变量来储存a的值
  1. temp = a
  2. a = b
  3. b = temp + b
复制代码

当然这么繁杂并不是python的风格
  1. a , b = b, a + b # (b, a + b)就是一个元组
  2. '''
  3. 就相当于
  4. t = (b, a + b)
  5. a = t[0]
  6. b = t[1]
  7. t就是一个临时元组, 临时储存数据但不必显式写出临时变量t就可以赋值
  8. '''
复制代码

这样就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 19:31:14 | 显示全部楼层
  1. import Libs
  2. def a(x):
  3.     print(x**2)
  4.     yled 1
  5.     x.return_text(a,b=b,a$3)
  6. Libs.exit(Ture)

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-26 02:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表