私はPythonにかなり慣れていないので、Pythonを使用して、スターンブロコットシーケンスのn番目の項を理解するプログラムを作成しようとしました(これを調べることができます。そのため、私の関数はSBSeqと呼ばれます)。何らかの理由で機能せず、次のようなエラーが発生します。
File "C:/Python27/Factorials.py", line 6, in SBSeq
return ((n%2)*SBSeq(ceil(n/2)-1))+SBSeq(ceil(n/2))
これは最終的にこれに行きます:
File "C:/Python27/Factorials.py", line 5, in SBSeq
if n == 1: return 1
RuntimeError: maximum recursion depth exceeded in cmp
これは元のコードです。
import math
from math import ceil
def SBSeq(n):
if n == 1: return 1
return ((n%2)*SBSeq(ceil(n/2)-1))+SBSeq(ceil(n/2))
どんな助けでもいただければ幸いです!
インデントの問題が実際の問題ではないと仮定すると、問題は、1
再帰的に行くときに番号が下に達する可能性があり、それが下に達すると1
(つまり、nが達すると0
)、終了せずに再帰的にSBSeqを呼び出し続けることです。
再帰関数の開始時の条件はif n <= 1 : return 1
。である必要があります。
コード-
def SBSeq(n):
if n <= 1: return 1
return ((n%2)*SBSeq(ceil(n/2)-1))+SBSeq(ceil(n/2))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加