【发布时间】:2018-03-08 17:19:06
【问题描述】:
我想让这段代码工作以通过递归找出斐波那契数列,但我不明白为什么我的代码无法做到这一点
class fib: #fibonacci series
a = 0
b = 0
c = 0
count = 0
def __init__(self, a , b,count):
self.a=a
self.b=b
self.count=count;
def fibb(self, a , b,count):
if(self.count > count):
return;
else:
if(self.count == 0):
print a
print b
self.count = self.count + 1
print " counting : ", self.count
self.c = self.a + self.b
self.a = self.b
self.b = self.c
#print self.a , ", ",self.b
return fibb(self.a,self.b,count)
else:
print b
self.count = self.count + 1
print " counting : ", self.count
self.c = self.a + self.b
self.a = self.b
self.b = self.c
#print self.a , ", ",self.b
return fibb(self.a,self.b,count)
fib1 = fib(1,2,0) # creating object
fib1.fibb(1,1,10) # calling function
我的输出:
回溯(最近一次通话最后):
文件“jdoodle.py”,第 36 行,在
fib1.fibb(1,1,10) # 调用函数
fibb 中的文件“jdoodle.py”,第 24 行
返回 fibb(self.a,self.b,count)
NameError:未定义全局名称“fibb”
命令以非零状态退出 1
【问题讨论】:
-
我认为你应该能够用大约 10 行代码编写递归斐波那契。为什么要采取如此复杂的方法?
-
如果要执行类方法,必须写
return self.fibb(self.a,self.b,count)。注意方法名前的self.,否则Python会在全局范围内寻找函数fibb。 -
@juanpa.arrivillaga 酷。但是当然递归并不是最好的方法:-)
-
你为什么在这里使用一个类?为什么不只是一个简单的函数?真的不需要所有这些状态。无论如何,您的错误源于使用
fibb而不是self.fibb