遞迴函式多次呼叫

2021-09-03 08:09:49 字數 1066 閱讀 1068

def

classify

(inputtree, featlabels, testvec)

:"""

在實際資料集中改屬性儲存在哪個位置? 是第乙個屬性還是第二個屬性?

:param inputtree:

:param featlabels:

:param testvec:

:return:

"""firststr =

list

(inputtree.keys())

[0] seconddict = inputtree[firststr]

# 將標籤字串轉換為索引, 使用index方法查詢當前列表中第乙個匹配firststr變數的元素

featindex = featlabels.index(firststr)

for key in seconddict.keys():

# 比較testvec變數中的值與樹節點的值

if testvec[featindex]

== key:

iftype

(seconddict[key]

).__name__ ==

'dict'

: classlabel = classify(seconddict[key]

, featlabels, testvec)

else

:# 如果到達葉子節點,返回當前節點的分類標籤

classlabel = seconddict[key]

return classlabel

第一次classlabel = classify(seconddict[key]), featlabels, testvec)呼叫了一次classlabel返回了classlabel 給了等號左邊的classlabel,

第二次return classlabel給了主程式的呼叫處

儲存當前指令位址

跳轉到被呼叫函式(指令段)的起始位址實際過程比這個複雜, 比如還包括儲存臨時變數和傳參等等, 但是對我們正在討論的問題不起到本質影響所以省略掉不談

函式遞迴呼叫

我們學習了函式的巢狀呼叫,可以在函式中呼叫函式。那麼,如果在乙個函式中,呼叫自己這個函式,那麼,這個執行過程稱為 函式遞迴呼叫。這個函式也稱為 遞迴函式。程式測試例子 程式執行結果如下 在這個測試例子中,我們定義了func函式,在func函式中又呼叫了func函式自己 所以,這個過程稱為 遞迴呼叫。...

spring quartz 多次呼叫

早上測試程式的時候,發現專案下的定時任務quartz同一時刻有乙個任務執行了兩次,但是我清楚地記得原來是沒有問題,很是懊惱。第一步 檢查配置檔案,檔案內有配置concurrent為false,理論上來講應該可以防止job同時執行兩次的問題。work false 0 0 2 第二步 既然不是quart...

函式的遞迴呼叫

乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式。c語言允許函式的遞迴呼叫。在遞迴呼叫中,主調函式又是被調函式。執行遞迴函式將反覆呼叫其自身。每呼叫一次就進入新的一層。例如有函式f如下 int f int x 這個函式是乙個遞迴函式。但是執行該函式將無休止地呼叫其自身,這當然是不正...