0
A
回答
4
撰寫將需要3個參數:編寫函數,編寫它的次數和初始參數。所以如果你想評估f(f(f(7))),你可以調用compose(f,3,7)。
def compose(f, n, x):
if n == 0: return x
return compose(f, n-1, f(x))
我想到這可能不是你想要的。也許你想能夠寫g = compose(f, 3)
,然後致電g(7)
。這隻需要稍作修改:
def compose(g, m):
def composer(f, n, x):
if n == 0: return x
return compose(f, n-1, f(x))
return lambda x: composer(g, m, x)
1
我不知道我是否理解正確,但我相信你期望compose()返回一個函數。在這種情況下,這會工作:
def compose(f, n):
def composed_f(x):
result = x
for i in range(n):
result = f(result)
return result
return composed_f
所以,如果你寫:
a = compose((lambda x:x*2), 5)
print a(1)
你會得到32
0
使用saulspatz的撰寫和拉姆達
cubed = lambda x: x**3
def compose(f, n, x):
if n == 0: return x
return compose(f, n-1, f(x))
print(compose(cubed,2,2))
512
0
雖然這可以使用遞歸簡潔地實現,迭代解決方案更高效,並且不會因0的大值而中斷。
def compose(f, n):
def iterated_f(x):
rv = x
while n > 0:
rv = f(rv)
return rv
return iterated_f
有什麼代碼可以顯示嗎? – idjaw
我感覺到[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – TigerhawkT3