用Python写斐波那契数列,为啥报错啊

Python 写斐波那契数列,出现报错,返回相加那里出现报错,说是不可操作类型。

img

你定义了febnaqi(m)函数并没有调用它,而且fib(m - 1) 和fib(m - 2) 肯定会出现小于1的情况

def fib(n):
    if n < 1:
        return print("Error");
    elif n == 1 or n == 2:
        return 1;
    else:
        return fib(n - 1) + fib(n - 2);
num = int(input());
for i in range(1, n + 1):
        print(fib(i), end="  ")

望采纳

1、def代码中还有def定义是错的
2、a调用b,b又调用a,循环调用会出错

def fibonacci(n):
    if n <= 0:
        return 0
    elif n == 1 or n == 2:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)
        
#测试函数
for i in range(1,11):
    print(fibonacci(i), end=' ')
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7719960
  • 你也可以参考下这篇文章:Python数据类型有哪些,哪些是可变类型,哪些是不可变类型?
  • 你还可以看下python参考手册中的 python- 序列和其他类型的比较
  • 除此之外, 这篇博客: python面试常见知识点收集,长期更新中的 【python】给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 参考技术博客 参考答案

    示例 1:           示例 2:                          示例 3:
    输入: 123         输入: -123                       输入: 120
    输出: 321         输出: -321                       输出: 21
    
    

    解法一:通过字符串的形式

    class Solution:
        def reverse(self, x: int) -> int:
            if x >= 0:
                reversed_x = int(str(x)[::-1])
            else:
                reversed_x = -int(str(x)[:0:-1])
            if -2 ** 31 < reversed_x < 2 ** 31 - 1:
                return reversed_x
            else:
                return 0
    

    解法二:取余的方式

    class Solution:
        def reverse(x):
            if (x/10 == 0):
                return x
            long int y = 0
            while(x):
                y *= 10
                if x > pow(2,31)-1 or x < pow(-2,31):
                    return 0
                y = y+ (x % 10)
                x /= 10
            print(y)
    

    解法三:字符串操作的思路

    class Solution:
        def reverse(self, x):
            """
            :type x: int
            :rtype: int
            """
            y = list(str(x))
            y.reverse()
            if y[-1] == "-":
                y.remove('-')
                y.insert(0, '-')
            if y[0] == 0:
                y.remove('0')
            y2 = ''.join(y)
            z = int(str(y2))
            if z < (-2**31) or z > (2**31-1):
                z = 0
            return z
    
  • 您还可以看一下 黄棒清老师的Python实战量化交易理财系统课程中的 初步模拟股票交易,实现买入和卖出时机小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可能出现错误的代码如下:

    def fib(n):
        if n <= 2:
            return 1
        fib_list = [1, 1]
        for i in range(2, n):
            fib_list[i] = fib_list[i-1] + fib_list[i-2]
        return fib_list[n-1]
    

    这里使用了列表的索引方式来访问列表元素,但是在第一次循环时,fib_list 只有两个元素,而在索引为 2 时就会出现错误。

    解决办法是将元素插入到列表中,而不是通过索引来修改元素。修改后的代码如下:

    def fib(n):
        if n <= 2:
            return 1
        fib_list = [1, 1]
        for i in range(2, n):
            fib_list.append(fib_list[-1] + fib_list[-2])
        return fib_list[n-1]
    

    这里将新生成的斐波那契数列元素插入到列表的尾部,以保证 fib_list 中有足够的元素来满足索引的需求。