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是怎么计算的,我怎么算都不对啊,求大佬们讲解一下 if语句不是判断吗...
啥时候也可以循环了
不懂你的意思啊 本帖最后由 滑稽蛋 于 2020-5-28 18:56 编辑
好的我已经搞懂了,还有就是循环的差别for循环的循环顺序是从上到下结束后就没有了,但是while循环是只要值是真,那么这个循环就会一直循环下去,知道值为假
我不知道这样子说对不对,大佬们求解 青出于蓝 发表于 2020-5-28 18:30
if语句不是判断吗...
啥时候也可以循环了
不懂你的意思啊
对不起是我搞错了,if是判断没错 以后遇到问题多思考思考,问题总会迎刃而解的 青出于蓝 发表于 2020-5-28 19:55
以后遇到问题多思考思考,问题总会迎刃而解的
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如n是5 滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...
if判断,不停的返回n3,直到符合条件为之。
也就是说一直调用n3本身,就是个递归{:10_257:} 滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...
n3总是不停的再保存,调用。一直到符合条件了,再停止 滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...
方便告诉我这是哪一讲吗... 青出于蓝 发表于 2020-5-28 21:16
if判断,不停的返回n3,直到符合条件为之。
也就是说一直调用n3本身,就是个递归
???哪里有递归??? 滑稽蛋 发表于 2020-5-28 21:13
可是还是现在我不懂得是他这个计算的值,我想应该是我带进去算错了,可是我想不明白你能讲解一下吗,假如 ...
你怎么调用函数的发来看看 Twilight6 发表于 2020-5-28 21:52
???哪里有递归???
我我我我蠢,刚刚在看一个汉诺塔详细讲解(就是python递归那一课)所以....{:5_96:} 青出于蓝 发表于 2020-5-28 22:00
我我我我蠢,刚刚在看一个汉诺塔详细讲解(就是python递归那一课)所以....
加油吧
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif 青出于蓝 发表于 2020-5-28 21:23
方便告诉我这是哪一讲吗...
没有,我说的是while循环那条他是怎么计算的,带入值5算,我自己算出来不是5 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数组 滑稽蛋 发表于 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 ,所以用赋值模拟位置移动
Twilight6 发表于 2020-5-29 08:44
你要先理解,斐波那契数列,如上
n 代表着是斐波那契数列的第几个数
因为我们前2个值是已经设置 ...
那我输入n=5时,代表这斐波那契数列的第五个数,然后下面循环的时候,是从5开始往下循环的嘛,直到这个值为False 滑稽蛋 发表于 2020-5-29 08:53
那我输入n=5时,代表这斐波那契数列的第五个数,然后下面循环的时候,是从5开始往下循环的嘛,直到这个值 ...
我们输入 n 是斐波那契的第几个还可以看作是次数,每次循环减一次,若输入 5是从 5-2 = 3
3 开始循环 每次循环 -1 所以循环三次可以得出第五个位置的 斐波那契数列 Twilight6 发表于 2020-5-29 08:54
我们输入 n 是斐波那契的第几个还可以看作是次数,每次循环减一次,若输入 5是从 5-2 = 3
3 开始 ...
5-2=3,3开始循环的值是n3的值是2啊,那2开始循环的话就false了呀 本帖最后由 滑稽蛋 于 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