2
我正在看麻省理工介紹ComScip,並且必須做一個遞歸調用。我很難在計數器中很好地計算字符串外觀的數量。隨着一種好運,並與櫃檯的位置開始播放,後續的解決方案的工作,但我不知道爲什麼:爲什麼在遞歸函數中計數器不會被重置爲0?
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
如果發現密鑰是目標,計數器= countSubStringMatchRecursive(target [slice_pos:],key) 這應該計數器復位到0再次因爲主要功能是正在跑
計數器+ = 1
返回1作爲計數器值,因爲0 + 1 = 1
我不該部分不明白爲什麼計數器= 0不將計數器重新初始化爲0.相反,它讓自己累積先前的值併產生正確的結果
謝謝吉米。幾個問題:1.我們如何知道哪些計數器副本因爲有多個副本而被返回?它總是被返回的初始副本(第一個堆棧)? – user2223224
是的,當方法返回'counter'時,它返回它的'counter'的OWN副本。因此,當你第一次打電話時,你會得到'counter'的第一個副本。基本上,你可以把它看作是你的方法是一個黑盒子,你不關心它在內部做什麼。所以當你遞歸地調用它時,只要假設它會給你回正確的答案,而不是混淆你的任何變量。 –