我正在解决以下问题:
编写一个函数is_fib(n)
,如果n是斐波那契数,则返回True,否则返回False。
这是我的代码:
def is_fib(n):
def fib(x):
if x == 0:
return 0
elif x == 1:
return 1
else:
return fib(x-1) + fib(x-2)
for a in n:
if fib(a) == n:
result = True
break
else:
result = False
return result
运行它会产生:
TypeError: 'int' object is not iterable.
我一直盯着代码半小时。非常感谢任何帮助。
答案 0 :(得分:1)
我认为你的意思是
for a in range(n)
不
for a in n
答案 1 :(得分:0)
正如jozefg所说你缺少范围(n)
还注意到你需要范围(n + 2)来涵盖所有情况
def is_fib(n):
def fib(x):
if x == 0:
return 0
elif x == 1:
return 1
else:
return fib(x-1) + fib(x-2)
for a in range(n+2):
if fib(a) == n:
return True
return False
print(is_fib(3))
答案 2 :(得分:0)
首先感谢帮助我的两个人。 但是,对于Yoav的版本,当n是一个非常大的数字时,python会遇到错误。
这是我的新版和改进版。
def is_fib(n):
if n < 0:
return False
else:
fib_0 = 0
fib_1 = 1
if n == fib_0 or n == fib_1:
return True
else:
for a in range(2,n+2):
fib = fib_0 + fib_1
fib_0,fib_1 = fib_1,fib
if fib >= n:
break
return fib == n