我使用Python编写了斐波纳契系列。无法弄清楚为什么第二个程序给出了错误答案,而第一个程序看起来都是正确的。
以下程序给出正确答案
def fib(n):
a,b=0,1
while b<n:
print b
a,b=b,a+b
fib(4)
1
1
2
3
以下程序给出了错误答案:
def fib(n):
a = 0
b = 1
while b<n:
print b
a = b
b = a+b
fib(4)
1
2
答案 0 :(得分:6)
在第一个中,a, b = b, a+b
同时进行分配
在第二个问题中,您首先执行a = b
,然后执行b = a+b
实际上只是b = 2*b
。
如何在第二个中实现这种行为?使用临时值来存储a
。
def fib(n):
a = 0
b = 1
while b<n:
print b
temp = a
a = b
b = temp+b
fib(4)
>>>1
>>>1
>>>2
>>>3
答案 1 :(得分:2)
在python中使用lambda函数的fibonacci系列
n = int(input("Enter the range of numbers in fibonacci series:"))
F = [0,1]
list(map(lambda i: F.append(F[i-1] + F[i-2]), range(2, n)))
print(F)
答案 2 :(得分:2)
n = int(input("Enter the range of numbers in fibonacci series:"))
F = [0,1]
[F.append(F[i-1] + F[i-2]) for i in range(2,n)]
print(F)
答案 3 :(得分:1)
在第一个示例中,您已使用此代码:
a,b=b,a+b
在第二场比赛中,您已经完成了这项工作:
a = b
b = a+b
这些不是同样的事情。
为了论证,我们要说a = 3
和b = 6
。让我们先运行工作代码:
>>> a, b = 10, a + 1
>>> a
10
>>> b
4
a + 1
的值是4而不是11,因为b
的分配正在使用a
的旧值,所以{ {1}}。
现在让我们将3 + 1 == 4
和a
放回原点。让我们尝试另一种分配方法:
b
现在>>> a = 10
>>> b = a + 1
>>> a
10
>>> b
11
是11!这是因为b
在分配a
之前已分配,因此添加使用b
&#39; s new 价值。
您的第二个版本无法正常工作的原因是因为分配不会同时发生,因此a
实际上是b
因为2 * b
已经设置为a
执行时b
。
答案 4 :(得分:1)
在发布的第二个代码中,您在更改a后重新定义了b的值,结果为
def fib(n):
a = 0
b = 1
while b<n:
print b #prints 1
a = b #a = 1
b = a+b #b = 1 + 1 = 2
在第二个代码中,没有问题,因为python代码通常从右到左读取方程式,因此首先重新定义b,正确
def fib(n):
a,b=0,1 #a = 0, b = 1
while b<n:
print b
a,b=b,a+b #b = 0 + 1 = 1, #a = 1
答案 5 :(得分:1)
def fibonacci (n):
if n == 1 or n == 2:
return 1
return fibonacci (n-1) + fibonacci (n-2)
for i in range(1,50):
print (fibonacci(i))
答案 6 :(得分:0)
n1 = 0
n2 = 1
c = 0
nTerms = int(input())
if nTerms <= 0:
print("Enter the valid value")
elif nTerms == 1:
print(a)
else:
while c < nTerms:
print(n1)
nth = n1 + n2
n1 = n2
n2 = nth
c += 1
答案 7 :(得分:0)
def f_recursion(n):
if n <= 1:
return n
else:
return(f_recursion(n-1) + f_recursion(n-2))
# Driver Code
nterms = int(input())
if nterms <= 0:
print("Enter the positive value")
else:
for i in range(0,nterms):
print (f_recursion(i))
答案 8 :(得分:0)
n1=int(input("Enter Term"))
mylist=[0,1]
for a in range(n1):
sum=0
for b in mylist[len(mylist)-2:]:
sum+=b
mylist.append(sum)
print(mylist)