我试图编写一个递归函数(使用Python)来计算如果11除以一个数字而不使用rest,减去11。我只需要使用这个规则https://en.wikipedia.org/wiki/11_(number)
代码有效,但是。。我想知道是否有办法缩小它,也许不需要变量“k”?你知道吗
def f(n, k=0):
if n=="" : return 0
t = ((-1)**(len(n)-1))*int(n[0]) + f(n[1:],k+1)
if k == 0:
if t <= -11 or t >= 11:
return f(str(abs(t)))
elif t == 0:
return True
else:
return False
return t
不完全是您想要的,但是您可以修改您的函数来计算
n mod m
的结果,然后检查它是否为零。类似的事情可以简化为:用法:
它应该是严格递归的吗?不允许迭代?为了避免使用k作为递归深度,可以采用半递归的方法,通过迭代计算t,并使用递归来减少t
让我们把设计转换成一个(n个未优化的)尾部递归,因此我们不使用
k
来检测返回到顶层,而是向下传递t
的增长值,并在到达基本情况时进行最终计算:现在我们总是返回一个布尔值,而不是之前的布尔值和整数混合结果!你知道吗
相关问题 更多 >
编程相关推荐