Python 写斐波那契数列,出现报错,返回相加那里出现报错,说是不可操作类型。
你定义了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=' ')
参考技术博客 参考答案
示例 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
可能出现错误的代码如下:
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 中有足够的元素来满足索引的需求。