鱼C论坛

 找回密码
 立即注册
查看: 1348|回复: 37

[已解决]Fibonacci迭代法代码问题

[复制链接]
发表于 2020-5-28 18:24:54 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 滑稽蛋 于 2020-5-28 18:56 编辑

def factorial(n):
        n1 = 1
        n2 = 1
        n3 = 1
        if n < 1:
                print('输入有误')
                return -1
        if (n-2) > 0:
                n3 = n1+n2
                n1 = n2
                n2 = n3
                n -= 1
        return n3


def fab_1(n):
        n1 = 1
        n2 = 1
        n3 = 1
        if n < 1:
                print('输入有误!')
                return -1
        while (n-2) > 0:
                n3 = n2 + n1
                n1 = n2
                n2 = n3
                n -= 1
        return n3


还有就是这里的Fibonacci是怎么计算的,我怎么算都不对啊,求大佬们讲解一下
最佳答案
2020-5-29 08:44:42
滑稽蛋 发表于 2020-5-29 08:32
>>> def fab_1(n):          #我不明白这个n代表什么
        n1 = 1
        n2 = 1
斐波那契数列:
1、1、2、3、5、8、13、21、34
除了第一个和第二个,后面的值都是它前面两个数之和
公式是:f(n)=f(n-1)+f(n-2)

你要先理解,斐波那契数列,如上
我不明白这个n代表什么
n 代表着是斐波那契数列的第几个数

n为什么要-2
因为我们前2个值是已经设置了,n1、n2 都等于 1 ,如果我们要求第三个值只需要循环一次即可,即 3-2 = 1

n1为什么就变成了n2
因为要往下推进呀,你下一个数是上两个数之和,当你进入循环时,n3是计算下一个值,n1,n2 就可以看成是 n3 的前两个值
每次你的 n3 往下一个值移动一次n1,n2也要往下移动,即 原来的n1 到了 原来的n2 位置 ,而 原来的n2位置 移动到了 n3 ,所以用赋值模拟位置移动


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-28 18:30:58 | 显示全部楼层
if语句不是判断吗...
啥时候也可以循环了
不懂你的意思啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-28 18:51:53 | 显示全部楼层
本帖最后由 滑稽蛋 于 2020-5-28 18:56 编辑

好的我已经搞懂了,还有就是循环的差别for循环的循环顺序是从上到下结束后就没有了,但是while循环是只要值是真,那么这个循环就会一直循环下去,知道值为假
我不知道这样子说对不对,大佬们求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-28 18:55:51 | 显示全部楼层
青出于蓝 发表于 2020-5-28 18:30
if语句不是判断吗...
啥时候也可以循环了
不懂你的意思啊

对不起是我搞错了,if是判断没错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 19:55:03 | 显示全部楼层
以后遇到问题多思考思考,问题总会迎刃而解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-28 21:13:30 From FishC Mobile | 显示全部楼层
青出于蓝 发表于 2020-5-28 19:55
以后遇到问题多思考思考,问题总会迎刃而解的

可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如n是5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 21:16:43 | 显示全部楼层
滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...

if判断,不停的返回n3,直到符合条件为之。
也就是说一直调用n3本身,就是个递归
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 21:17:37 | 显示全部楼层
滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...

n3总是不停的再保存,调用。一直到符合条件了,再停止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 21:23:48 | 显示全部楼层
滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...

方便告诉我这是哪一讲吗...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 21:52:17 | 显示全部楼层
青出于蓝 发表于 2020-5-28 21:16
if判断,不停的返回n3,直到符合条件为之。
也就是说一直调用n3本身,就是个递归

???哪里有递归???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 21:53:50 | 显示全部楼层
滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...

你怎么调用函数的  发来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 22:00:33 | 显示全部楼层
Twilight6 发表于 2020-5-28 21:52
???哪里有递归???

我我我我蠢,刚刚在看一个汉诺塔详细讲解(就是python递归那一课)所以....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-28 22:02:03 | 显示全部楼层
青出于蓝 发表于 2020-5-28 22:00
我我我我蠢,刚刚在看一个汉诺塔详细讲解(就是python递归那一课)所以....

加油吧

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 06:14:30 From FishC Mobile | 显示全部楼层
青出于蓝 发表于 2020-5-28 21:23
方便告诉我这是哪一讲吗...

没有,我说的是while循环那条他是怎么计算的,带入值5算,我自己算出来不是5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 08:32:20 | 显示全部楼层
Twilight6 发表于 2020-5-28 21:53
你怎么调用函数的  发来看看


>>> def fab_1(n):          #我不明白这个n代表什么
        n1 = 1
        n2 = 1
        n3 = 1
        if n < 0:
                print('输入有误')
                return -1
        while (n-2) > 0:            #还有n为什么要-2
                n3 = n1+n2         
                n1 = n2               #n1为什么就变成了n2
                n2 = n3               #n2为什么就变成了n3
                n -= 1
        return n3

>>> fab_1(5)
5


就这样子不懂,Fibonacci数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 08:44:42 | 显示全部楼层    本楼为最佳答案   
滑稽蛋 发表于 2020-5-29 08:32
>>> def fab_1(n):          #我不明白这个n代表什么
        n1 = 1
        n2 = 1
斐波那契数列:
1、1、2、3、5、8、13、21、34
除了第一个和第二个,后面的值都是它前面两个数之和
公式是:f(n)=f(n-1)+f(n-2)

你要先理解,斐波那契数列,如上
我不明白这个n代表什么
n 代表着是斐波那契数列的第几个数

n为什么要-2
因为我们前2个值是已经设置了,n1、n2 都等于 1 ,如果我们要求第三个值只需要循环一次即可,即 3-2 = 1

n1为什么就变成了n2
因为要往下推进呀,你下一个数是上两个数之和,当你进入循环时,n3是计算下一个值,n1,n2 就可以看成是 n3 的前两个值
每次你的 n3 往下一个值移动一次n1,n2也要往下移动,即 原来的n1 到了 原来的n2 位置 ,而 原来的n2位置 移动到了 n3 ,所以用赋值模拟位置移动


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 08:53:08 | 显示全部楼层
Twilight6 发表于 2020-5-29 08:44
你要先理解,斐波那契数列,如上
n 代表着是斐波那契数列的第几个数

因为我们前2个值是已经设置 ...

那我输入n=5时,代表这斐波那契数列的第五个数,然后下面循环的时候,是从5开始往下循环的嘛,直到这个值为False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-29 08:54:59 | 显示全部楼层
滑稽蛋 发表于 2020-5-29 08:53
那我输入n=5时,代表这斐波那契数列的第五个数,然后下面循环的时候,是从5开始往下循环的嘛,直到这个值 ...

我们输入 n 是斐波那契的第几个还可以看作是次数,每次循环减一次,若输入 5  是从 5-2 = 3   

3 开始循环 每次循环 -1 所以循环三次可以得出第五个位置的 斐波那契数列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 09:00:57 | 显示全部楼层
Twilight6 发表于 2020-5-29 08:54
我们输入 n 是斐波那契的第几个还可以看作是次数,每次循环减一次,若输入 5  是从 5-2 = 3   

3 开始 ...

5-2=3,3开始循环的值是n3的值是2啊,那2开始循环的话就false了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-29 09:35:25 | 显示全部楼层
本帖最后由 滑稽蛋 于 2020-5-29 09:40 编辑
Twilight6 发表于 2020-5-29 08:54
我们输入 n 是斐波那契的第几个还可以看作是次数,每次循环减一次,若输入 5  是从 5-2 = 3   

3 开始 ...


是我蠢了,难道说他下面的n -= 1的意思是n-2减完后的值循环完后再-1,然后大于0,在进入循环的意思嘛
然后就是说3-1=2,2>0,进入下一次循环,1+2=3,再2-1=1,1>0,再进入循环3+2=5

是这意思,我把那个n -=1 的意思搞错了,我一直以为再重新进入循环,把我输入的值例如5来-1了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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