【发布时间】:2018-04-30 01:24:53
【问题描述】:
我想使用 Python 的函数式编程功能在 Python 中构建一个 while 循环,但直到现在我都失败了。
我所完成的是代码的和平,它应该计算可以被数字 1 到 20 整除的最小数字。但它似乎并没有大量使用函数式编程功能。并且还给了我如下错误:
“运行时错误:超出最大递归深度”在“i”的增量行;
即使这应该限制在 20 个。
def byYmult(x, y): return x % y == 0
def first20div():
i=0
for y in range(1,20):
i += byYmult(x, y)
return i >= 20
def while_block():
global x
if first20div():
print(x)
return 1
else:
x += 1
return 0
x = 0
while_FP = lambda: ((not first20div()) and while_block() ) or while_FP()
while_FP()
【问题讨论】:
-
你已经问过一次这个问题了。但是错误不言自明:您对迭代的每个元素执行递归。解决方案>1G。所以堆栈正在建立。请注意,使用全局变量实际上几乎肯定不起作用。由于函数式编程通常适用于不可变数据。
-
@WillemVanOnsem 我不明白你的回答。我执行递归来增加我正在寻找的数字,迭代(for循环)是条件检查部分(即了解我是否必须停止递归)。
-
你在哪里看到任何递归?
-
什么是
byYmult()?请将此设为minimal reproducible example。此外,如果使用 for 循环,代码似乎也不是很实用。
标签: python recursion functional-programming