再帰を使用して次の数式をコード化しようとしています。 私はさまざまな方法でそれをやろうと考えていましたが、式が再帰的であるため、再帰が必要です。 私は単純な問題に再帰を適用する方法を知っていますが、この特定のケースでは私の理解は間違っているようです。私はpythonでそれをコーディングしようとしましたが、コードはメッセージ再帰を使用してこの数式をコード化することは可能ですか?
RuntimeError: maximum recursion depth exceeded
で失敗したので、私はこの表現と再帰は全く可能であるかどうかをコーディングするための最良の方法は何かお願いしたいと思います。
私が試したPythonコードである:
def coeff(l,m,m0,m1):
if l==0 and m==0:
return 1.
elif l==1 and m==0:
return -(m1+m0)/(m1-m0)
elif l==1 and m==1 :
return 1./(m1-m0)
elif m<0 or m>l:
return 0.
else:
return -((l+1.)*(m1-m0))/((2.*l+1.)*(m1+m0))* \
((2.*l+1.)*(m+1.)/((l+1.)*(2.*m+3.)*(m1-m0))*coeff(l,m+1,m0,m1) +\
(2.*l+1.)*m/((l+1.)*(2.*m-1.)*(m1-m0))*coeff(l,m-1,m0,m1) -\
l/(l+1.)*coeff(l-1,m,m0,m1))
x=m1-m0
とy=m1+m0
。私のコードでは、他の関数としての係数をa(l,m)
で表現しようとし、それに基づいて再帰をコーディングしました。
動的プログラミングがおそらくこれに適しています。 – Keiwan
私はできる限り毎回再帰を避けます。 DPはより良い、より速い解決法をよりよく見せます –
あなたはどうやってcoeff(...)を呼び出しますか?また、 "rin"はどういう意味ですか? – Ukimiku