1. ホーム
  2. python

[解決済み] リピート機能 python

2022-02-15 08:56:11

質問内容

Pythonの高次関数に行き詰っています。繰り返し関数を書きたいのですが repeat を適用した関数 f n 回、与えられた引数に対して x .

例えば repeat(f, 3, x)f(f(f(x))) .

これが私の持っているものです。

def repeat(f,n,x):
    if n==0:
        return f(x)
    else:
        return repeat(f,n-1,x)

次の行をアサートしようとすると

plus = lambda x,y: repeat(lambda z:z+1,x,y)
assert plus(2,2) == 4

を与えてくれるんです。 AssertionError . について読みました。 ある関数をn回繰り返す方法 が、この方法でやってもらわなければならないのに、わからない...。

どのように解決するのですか?

2つの問題があります。

  1. 間違った回数で再帰している(もし n == 1 この関数は1回だけ呼ばれるべきです)。
  2. を呼び出しているわけではありません。 f を再帰呼び出しの返り値に対して適用するため、この関数は一度しか適用されません。

試してみてください。

def repeat(f, n, x):
    if n == 1: # note 1, not 0
        return f(x)
    else:
        return f(repeat(f, n-1, x)) # call f with returned value

または、その代わりに

def repeat(f, n, x):
    if n == 0:
        return x # note x, not f(x)
    else:
        return f(repeat(f, n-1, x)) # call f with returned value

(をサポートしました(後者については @Kevin に感謝します)。 n == 0 ).

>>> repeat(lambda z: z + 1, 2, 2)
4
>>> assert repeat(lambda z: z * 2, 4, 3) == 3 * 2 * 2 * 2 * 2
>>>