對於上篇文章所說的“遞歸策略只需少量的程序就可描述出解題過程所需要的多次重複計算,大大地減少了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合”,這只是一個表象,最主要的思想是看起來規模很大的問題劃分爲一個或者多個規模更小的子問題,而這些子問題可以用同樣的方法去求解。
用遞歸來解決問題的時候,遵循如下幾步。
1 找出初始條件接口(遞歸出口)。
2 找到策略,將大問題劃分爲子問題,並接近出口
3將所有的子問題組合起來,得到原問題的解
在這過程中,需要注意的幾個問題
1 規模如何縮小
2 縮小了還是不是同一個問題
3 多大問題的規模,可做爲出口
4 縮小了,能達到遞歸出口嗎?
有了這幾個問題,需要找到這幾個問題的答案,找到答案的目的,是證明這算法的正確性,
這裏就要用到數學的歸納法與循環不變量(比如在迭代中,始終不變的條件)
1 檢測出口條件下,問題是不是能正確解決,及循環不變量是不是真
2 是不是一步步接近遞歸出口,即循環不變量是不是爲真
3 證明 小問題得到解決-》原始問題也得到解決 。
思想-》產生規則-》證明規則的正確性
如此反覆,使你有一個用遞歸思想思考問題的習慣