我还是Python的初学者。我最近尝试过关于斐波纳契数的第二个项目欧拉问题,不幸的是我被卡住了。在一个简单的for循环中,不能少。在这个for循环中,我尝试将函数的返回结果赋给变量,并且所述变量是否与条件匹配,则总计增加。但是,这个循环只在它退出之前运行一次,我绝对感到困惑。我的智慧结束了;如果您有任何人可以帮助纠正这个问题,我将不胜感激。以下是我的代码的相关部分:
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
x = n - 1
y = n - 2
return x + y
num = input("Input your number of choice: ")
total = 0
问题区域:
for i in range(int(num)):
val = fibonacci(i)
if (val % 2 == 0):
total = total + val
print(total)
答案 0 :(得分:1)
是的,它只会计算total = total + val
一次,当val = 0
时,对于所有其他情况,您的斐波那契函数返回的2*n -3
总是奇数,但您正在检查是否返回的val是even
(除了0时它永远不会出现),因此也就是问题。
也许您想要返回类似的内容 -
return fibonacci(x) + fibonacci(y) # or the simpler , fibonacci(n-1) + fibonacci(n-2)
答案 1 :(得分:0)
请注意,Fibonacci numbers的序列Fn
由递归关系F_n = F_{n-1} + F_{n-2}
定义。
选项1:使用递归
而不是return (n-1) + (n-2)
,它应该是return fibonacci(n-1) + fibonacci(n-2)
。
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
x = fibonacci(n-1)
y = fibonacci(n-2)
return x + y
num = input("Input your number of choice: ")
print(fibonacci(num))
以下是一个例子:
$ python fibonacci.py
Input your number of choice: 11
89
选项2:使用循环
def fibonacci(num):
a,b = 1,1
for i in range(num-1):
a,b = b,a+b
return a
print fibonacci(num)
答案 2 :(得分:-1)
我看到的问题是您正在尝试打印在for
循环中分配的变量。相反,你可以做......
for i in range(int(num)):
val = fibonacci(i)
if (val % 2 == 0):
return (total + val)