【发布时间】:2013-12-24 06:38:14
【问题描述】:
我需要创建一个递归函数repeat,它接受一个函数并使用函数n 次x 的值。这是一个迭代版本,可以更详细地解释我的问题。
def repeat(fn, n, x):
res = x
for i in range(n):
res = fn(res)
print(res)
return res
print(repeat(lambda x: x**2, 3, 3)) returns 6561
首先需要 3^2,然后是 3^2^2,即 81,然后是 3^2^2^2 = 6561。 我怎样才能使这个递归,所以它可以像这样工作。
square_three_times = repeat(lambda x: x**2, 3)
print(square_three_times(3)) return 6561
我尝试过这样的事情,但我真的迷路了,不知道该怎么办。
def repeat(fn, n):
if n == 1:
return fn(n):
else:
def result(x):
return fn(n)
return repeat(fn,result(x))
这显然行不通,因为递归将永远持续下去。但我不确定我应该如何编写这段代码,因为我首先需要计算 3^2,然后再进行下一步 9^2 等等。
【问题讨论】:
-
你需要让它递归,还是需要它像那样工作?不必涉及递归。
-
我需要它是递归的
-
为什么不使用
x参数作为递归变量? -
如果你想要一个只做重复的函数实现
repeat(fn, n, x)并使用functools.partial来实现柯里化。 -
请注意,在 Python 3.3 中,您问题中的给定示例返回 81。