我很确定这一定是我的一些明显愚蠢的错误。但任何人都可以使用递归来解释这个除法代码中的错误。我知道有很多选择,但我需要知道这个
有什么问题def division(a,b):
x = 0
if a < b:
return x
else:
x += 1
return division(a-b,b)
return x
当我进行除法(10,2)时,它给出0作为输出
答案 0 :(得分:1)
您始终将本地变量x
设置为0
。
然后,如果被除数小于除数,则返回x
,当然为0。
另一方面,当被除数大于或等于除数时,你将x
增加1
并用递减的被除数进行递归调用,这当然会导致第一种情况。结束并仍然返回x
,其中包含0
的值。
注意:尽管如此,由于return
和if
分支都包含else
,您的最终return
无法访问。
所以请尝试考虑这个解决方案:
def division(a, b):
if a < b:
return 0
else:
return 1 + division(a-b, b)
答案 1 :(得分:0)
这可能会对你有所帮助:
def division(a,b,x=0):
if a < b:
return x
else:
x += 1
return division(a-b,b,x)
return x
每次你的函数都经历了一次新的回归时,你将x设置为0.这样,如果没有指定x,它默认为0,并且应该像我想要的那样想想。< / p>
另请注意,这不适用于负数,但您可能知道:)
答案 2 :(得分:-1)
您的逃生条件为if a < b
。这意味着要终止此函数,必须满足此函数以保留递归。但是,因为x
声明在函数的顶部,只在else
语句的主体内重新定义但从未返回,所以函数将始终以值x = 0
终止。 / p>
您应该设置x = 1 + division(a-b,b)
或return division(a-b,b) + 1
并在结尾删除无法访问的return
。
def div(a, b, x):
if a < b:
return x
else:
x +=1
return div(a - b, b, x)
print(div(130, 10, 0))
# 13
答案 3 :(得分:-1)
随着全球化你得到:
def division(a,b):
global x
if a < b: return x
else:
x += 1
return division(a-b,b)
x=0
print (division(10,2))
但是,每次调用x
division
设置为零
答案 4 :(得分:-1)
这可能使您免于RecursionError:
def div(x, y):
if y == 0:
return 0
elif x == y:
return 1
elif x < y:
if y * -1 == x:
return -1
elif x % y == 0:
return 1 + div(x - y, y)
else:
return 0
else:
if y < 0:
return 1 - div(x - y, -y)
else:
return 1 + div(x - y, y)
#Application
A = div(1, 2)
B = div(-9, 9)
C = div(3, 2)
D = div(-9, -3)
E = div(100, -2)
print(A) # 0
print(B) # -1
print(C) # 1
print(D) # 3
print(E) # -50
答案 5 :(得分:-3)
我认为这是最好的方法,这样您也可以得到浮动答案
def division(a,b):
if a == 0 or a == 1 or a == 2:
return b
else:
return a / division(a % b,b)
print(division(9,2))