ComScip の MIT イントロを見ているのですが、再帰呼び出しを行う必要があります。弦の出現数を数えるカウンターがうまく収まらず困っていました。運が良ければ、カウンターの位置をいじって、次の解決策が機能しますが、理由はわかりません。
import string
target = "banana"
key = "an"
key_len = len(key)
found_pos = 0
found_pos = string.find(target,key)
def countSubStringMatchRecursive (target, key):
counter=0
found_pos = string.find(target,key)
if(found_pos!=-1):
print "found"
slice_pos = found_pos + key_len
counter = countSubStringMatchRecursive (target[slice_pos:], key)
counter+=1
#print counter
return counter
print countSubStringMatchRecursive (target, key)
ここに私の理解があります:
最初の再帰:
初期化カウンター=0
メイン関数が実行されているため、これによりカウンターが再び 0 にリセットされます。
カウンター+=1
0+1=1 であるため、カウンター値として 1 を返します。
私が理解していない部分は、counter=0 がカウンターを 0 に再初期化しない理由です。代わりに、以前の値を蓄積し、正しい結果を生成します。