10
/
5
/ \
2 3 // \ 1 1 2 / 1
def fusc(n): 对于范围(0,n)中的i: 如果n == 0: 返回0 elif n == 1: 返回1 elif n%2 == 0: 返回fusc(n / 2) elif n%2!= 0: n = n // 2 返回(fusc(n)+ fusc(n + 1))
a = fusc(10) 打印(a)
Type error :float object cannot be interpreted as an integer
答案 0 :(得分:1)
问题在return fusc(n/2)
行中。该除法的结果是float
。因此,您在此处用fusc()
的{{1}}调用n/2
,并且此浮点数输入float
,但是范围的签名不允许使用浮点数!解决的办法是在整数中使用整数,并将range(0, n)
替换为/
(所谓的“底数除法”),这将返回整数而不是//
。另外,您在float
调用中不需要0
,它与range()
答案 1 :(得分:0)
尝试一下:
elif n%2 == 0: 返回fusc(n // 2)
但如果不是这样:请尝试重新创建这部分代码。
答案 2 :(得分:0)
这是缺少的回溯:
Traceback (most recent call last):
File "C:\test.py", line 13, in <module>
a = fusc(10)
File "C:\test.py", line 8, in fusc
return fusc(n/2)
File "C:\test.py", line 2, in fusc
for i in range(0,n):
TypeError: 'float' object cannot be interpreted as an integer
for i in range(0,n):
导致了错误。 i
或n
必须是浮点数,应为整数。 range
返回整数序列并需要整数参数,因此它必须为n
。
return fusc(n/2)
是堆栈上的上一个函数调用。 Python 3中的/
是浮点除法,结果是浮点。使用//
进行整数除法可以解决此问题。
答案 3 :(得分:0)
尝试一下
def fusc(n):
for i in range(0, n):
print(n)
if n == 0:
return 0
elif n == 1:
return 1
elif n % 2 == 0:
return fusc(int(n/2))
elif n % 2 != 0:
n = n//2
return fusc(n)+fusc(n+1)
a = fusc(10)
print(a)
我的结果是
10
5
2
1
3
1
2
1
3
P.S:在python中,如果您将10/3除以3,就等于3.333333 错误行的n / 2不是5,而是5.0
答案 4 :(得分:-1)
简单修复。只需更改:
for i in range(0,n):
到
for i in range(0,int(n)):