我正在使用代码
fibList=[1]
def fib(n1, n2):
n3 = n1+n2
n1=n2
n2=n3
num1=1
num2=2
while(num2<4000000):
fib(num1,num2)
if (num2%2==0):
fibList.append(num2)
total = sum(fibList)
print total
在在线编译器中,repl.it。它一直在前进而没有提供解决方案,因此我在print n3
函数的定义中的n3=
行的正下方键入了行fib
。它一遍又一遍地给了3,它在我停止程序之前崩溃了。显然,某处有某种无限循环(至少,显然在我的脑海中;我想,它不可能是一个无限循环,但我很确定它是)。问题是在哪里。我真的不明白为什么会出现无限循环。
顺便说一句,这不是一个家庭作业问题,而是我为了好玩而做的一个问题。 fib
函数应该计算Fibonacci数,第二部分隔离偶数少于四百万的函数,然后计算总和。
我想知道的是无限循环的来源以及我可以做些什么来解决它。谢谢!
答案 0 :(得分:6)
n1
,n2
和n3
是局部变量,与外部作用域中的num1
和num2
没有任何共同之处,尽管它们具有初始值。您必须return
该值并将这些结果再次分配给num1
和num2
。
def fib(n1, n2):
n3 = n1+n2
n1=n2
n2=n3
return n1, n2
num1=1
num2=2
fibList=[1]
while num2<4000000:
num1, num2 = fib(num1,num2)
if num2%2==0:
fibList.append(num2)
total = sum(fibList)
print total