滑稽蛋 发表于 2020-5-28 18:24:54

Fibonacci迭代法代码问题

本帖最后由 滑稽蛋 于 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-28 18:30:58

if语句不是判断吗...
啥时候也可以循环了
不懂你的意思啊

滑稽蛋 发表于 2020-5-28 18:51:53

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

好的我已经搞懂了,还有就是循环的差别for循环的循环顺序是从上到下结束后就没有了,但是while循环是只要值是真,那么这个循环就会一直循环下去,知道值为假
我不知道这样子说对不对,大佬们求解

滑稽蛋 发表于 2020-5-28 18:55:51

青出于蓝 发表于 2020-5-28 18:30
if语句不是判断吗...
啥时候也可以循环了
不懂你的意思啊

对不起是我搞错了,if是判断没错

青出于蓝 发表于 2020-5-28 19:55:03

以后遇到问题多思考思考,问题总会迎刃而解的

滑稽蛋 发表于 2020-5-28 21:13:30

青出于蓝 发表于 2020-5-28 19:55
以后遇到问题多思考思考,问题总会迎刃而解的

可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如n是5

青出于蓝 发表于 2020-5-28 21:16:43

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

if判断,不停的返回n3,直到符合条件为之。
也就是说一直调用n3本身,就是个递归{:10_257:}

青出于蓝 发表于 2020-5-28 21:17:37

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

n3总是不停的再保存,调用。一直到符合条件了,再停止

青出于蓝 发表于 2020-5-28 21:23:48

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

方便告诉我这是哪一讲吗...

Twilight6 发表于 2020-5-28 21:52:17

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

???哪里有递归???

Twilight6 发表于 2020-5-28 21:53:50

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

你怎么调用函数的发来看看

青出于蓝 发表于 2020-5-28 22:00:33

Twilight6 发表于 2020-5-28 21:52
???哪里有递归???

我我我我蠢,刚刚在看一个汉诺塔详细讲解(就是python递归那一课)所以....{:5_96:}

Twilight6 发表于 2020-5-28 22:02:03

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

加油吧
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif

滑稽蛋 发表于 2020-5-29 06:14:30

青出于蓝 发表于 2020-5-28 21:23
方便告诉我这是哪一讲吗...

没有,我说的是while循环那条他是怎么计算的,带入值5算,我自己算出来不是5

滑稽蛋 发表于 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数组

Twilight6 发表于 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 ,所以用赋值模拟位置移动


滑稽蛋 发表于 2020-5-29 08:53:08

Twilight6 发表于 2020-5-29 08:44
你要先理解,斐波那契数列,如上
n 代表着是斐波那契数列的第几个数
因为我们前2个值是已经设置 ...

那我输入n=5时,代表这斐波那契数列的第五个数,然后下面循环的时候,是从5开始往下循环的嘛,直到这个值为False

Twilight6 发表于 2020-5-29 08:54:59

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

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

3 开始循环 每次循环 -1 所以循环三次可以得出第五个位置的 斐波那契数列

滑稽蛋 发表于 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了呀

滑稽蛋 发表于 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了
页: [1] 2
查看完整版本: Fibonacci迭代法代码问题