2017-09-04 40 views
-1

我确信这一定是我的一个明显愚蠢的错误。但任何人都可以使用递归来解释这个分割代码有什么问题。我知道有很多的选择,但我需要知道什么是错这个在python中使用递归的分区

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

在这种情况下,x必须是全局的。 – pcu

+0

您总是将x设置为0. – Szabolcs

回答

-1

这可能工作好一点你:

def division(a,b,x=0): 
    if a < b: 
     return x 
    else: 
     x += 1 
     return division(a-b,b,x) 
    return x 

您的每一次函数通过新recusion跑,你将x设置为0 。这样,如果没有指定x,它默认为0,并且应该像我想要认为一样工作。

另外请注意,这不会为负数的工作,但你可能知道:)

-1

逃生条件是if a < b。这意味着为了终止这个函数,必须完成这个才能离开递归。但是,由于x是在函数的顶部声明的,因此只在else语句的主体内重新定义但从未返回,函数将始终以值x = 0终止。

您应该设置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 
+0

那么我应该声明x全局还是有其他选择? – Ram

+0

将x回馈给自己 - 这需要以x作为0喂食,这虽然不起作用,但起作用:请参阅上面的编辑 – camoverride

0

你总是局部变量x设置为0

这时如果股息比除数小你返回x这当然是0

的。另一方面,当股息大于或等于给你增加x通过1除数和执行递归以减少的红利进行呼叫,这当然会导致第一个案例结束,并且您仍然返回一个x,该值为0

注意:尽管如此,由于您的ifelse分支都包含return,因此无法访问您的最终return

所以请尽量考虑这个解决方案:

def division(a, b): 
    if a < b: 
     return 0 
    else: 
     return 1 + division(a-b, b) 
-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