【问题标题】:recursion function to find fibonnaci series寻找斐波那契数列的递归函数
【发布时间】: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

标签: python recursion


【解决方案1】:

引用函数时使用self.fibb。 Python 并不明确知道在类中调用 fibb 函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 2020-03-21
    • 2012-11-19
    • 2021-12-01
    • 2016-11-07
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多