python - 递归函数计算11是否除以一个数字
问题描述
我正在尝试编写一个递归函数(使用 Python)来计算 11 是否除以一个数字而不使用休息,减法 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 个未优化的)尾递归,因此我们不使用k
检测返回到顶层,而是传递t
向下的增长值并在遇到基本情况时进行最终计算:
def f(n, t=0):
if not n:
if -11 < t < 11:
return t == 0
return f(str(abs(t)))
return f(n[1:], int(n[0]) - t)
现在我们总是返回一个布尔值,而不是之前混合的布尔值和整数结果!
推荐阅读
- asp.net - Mono + Apache + ASP.NET 中的 500 错误
- r - 多元回归Excel
- nginx - 如何删除 .php 和 .html 到 URL 并在 Nginx 中添加斜杠?
- string - 使用 bash 从包含多个单词的字符串中的每个单词中提取最后一位数字
- regex - 在 Splunk 中将一组字符转置为另一组字符
- mysql - MySQL - 每个州根据单个 export_values 的总和导出的顶级产品
- python-3.x - AttributeError:Roboclaw 实例没有属性“_port”
- ruby-on-rails - Rails 关联不适用于属性
- oracle - PostgreSQL 分页和行号索引
- acumatica - 扩展条款计算