在很多專案中用上迭代或者堆疊思想,會使問題簡化很多,並且**簡潔,易於理解,這兩種方法的掌握很考驗程員的邏輯思維能力和應用簡潔方法解決問題的決心。
先上個遞迴函式實現逐級查詢的例子:
menu =,迭代函式實現資料的逐級查詢'網易': {},
': {}
},'中關村
': ,
'汽車之家
': {},
'youku
': {},
},'上地
': ,
},},
'昌平': ,
'北航': {},
},'天通苑
': {},
'回龍觀
': {},
},'朝陽
': {},
'東城': {},
},'上海
': }
},'閘北
': }
},'浦東
': {},
},'山東
': {},
} #
一項包含多項內容的也適用dictionary
def threelm(dic): #
遞迴一定是遞迴函式了
while
true:
for k in dic:print(k) #
列印menu的key,也就是列印一級選單,北京,上海等
key = input('
input>>
').strip()
if key == 'b'
or key == '
q':return key #
如果本次函式返回q或者b,則結束本次函式,返回值返回給上次函式被呼叫處
elif key in dic.keys() and dic[key]: #
如果用輸入的內容是menu的key的乙個
ret = threelm(dic[key]) #
就再呼叫這個函式,把這個key的值傳給函式,接著列印下級選單
if ret == '
q': return'q
'#如果下次函式返回的值是q,則結束本次函式,把q返回給上次函式,一直返回到第一層,然後結束函式
threelm(menu)
再來個堆疊實現逐級查詢的例子:
menu =,堆疊實現資料的逐級查詢'網易': {},
': {}
},'中關村
': ,
'汽車之家
': {},
'youku
': {},
},'上地
': ,
},},
'昌平': ,
'北航': {},
},'天通苑
': {},
'回龍觀
': {},
},'朝陽
': {},
'東城': {},
},'上海
': }
},'閘北
': }
},'浦東
': {},
},'山東
': {},
} #
一項包含多項內容的也適用dictionary
l = [menu] #
堆疊常用開頭,給個列表,把巢狀的字典放入列表
while
l:
for key in l[-1]:print(key) #
列印menu的key,也就是一級選單
k = input('
input>>
').strip()
如果輸入的內容在一級選單中並且此內容的值不是空,則把此內容的值新增到列表中
elif k == '
b':l.pop() #
如果輸入b,則刪除列表中的最後一項,那麼下次迴圈,列印的一定是上級選單
elif k == '
q':break
#如果輸入q,那麼迴圈停止,程式結束
這兩種方法,還是堆疊更容易理解一些,以後凡是遇到資料逐級查詢的需求,一定要試著往堆疊的方向上想
遞迴思想和迭代思想
遞迴思想的乙個基本形式是 在乙個函式中,有至少一條語句,又會去呼叫該函式自身。但是,從 角度來說,如果單純是函式內部呼叫函式本,則會出現 出不來 的現象。則我們就必須再來解決下乙個問題 怎麼終止 停止 這種呼叫 找到遞迴函式的出口。遞推思想本身並不跟函式有直接關係 雖然常常寫在函式中 其基本思路為 ...
遞迴的思想與應用
遞迴是一種數學上分而自治的思想,將原問題分解為規模較小的問題進行處理,分解後的問題與原問題的型別完全相同,但規模較小,通過小規模問題的解,能夠輕易求得原問題的解,但是問題的分解是有限的,當邊界條件滿足時,遞迴結束直接求解否則遞迴繼續進行,在程式設計中遞迴函式就是遞迴的體現,遞迴模型的一般表示法如下 ...
六 遞迴的思想與應用
遞迴是一種數學上分而治之的思想 將原問題分解為規模較小的問題進行處理 分解後的問題與原問題的型別完全相同,但規模較小 通過小規模問題的分解,能夠輕易求得原問題的解 問題的分解是有限的 遞迴不能無限進行 當邊界條件不滿足時,分解問題 遞迴繼續進行 當邊界條件滿足時,直接求解 遞迴結束 遞迴在程式設計中...