在python

时间:2017-09-04 05:46:30

标签: python recursion

我很确定这一定是我的一些明显愚蠢的错误。但任何人都可以使用递归来解释这个除法代码中的错误。我知道有很多选择,但我需要知道这个

有什么问题
def division(a,b):
    x = 0
    if a < b:
        return x
    else:
        x += 1
        return division(a-b,b) 
    return x

当我进行除法(10,2)时,它给出0作为输出

6 个答案:

答案 0 :(得分:1)

您始终将本地变量x设置为0

然后,如果被除数小于除数,则返回x,当然为0。

另一方面,当被除数大于或等于除数时,你将x增加1并用递减的被除数进行递归调用,这当然会导致第一种情况。结束并仍然返回x,其中包含0的值。

注意:尽管如此,由于returnif分支都包含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))