對於上篇文章所說的「遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。遞迴的能力在於用有限的語句來定義物件的無限集合」,這只是乙個表象,最主要的思想是看起來規模很大的問題劃分為乙個或者多個規模更小的子問題,而這些子問題可以用同樣的方法去求解。
用遞迴來解決問題的時候,遵循如下幾步。
1 找出初始條件介面(遞迴出口)。
2 找到策略,將大問題劃分為子問題,並接近出口
3將所有的子問題組合起來,得到原問題的解
在這過程中,需要注意的幾個問題
1 規模如何縮小
2 縮小了還是不是同乙個問題
3 多大問題的規模,可做為出口
4 縮小了,能達到遞迴出口嗎?
有了這幾個問題,需要找到這幾個問題的答案,找到答案的目的,是證明這演算法的正確性,
這裡就要用到數學的歸納法與迴圈不變數(比如在迭代中,始終不變的條件)
1 檢測出口條件下,問題是不是能正確解決,及迴圈不變數是不是真
2 是不是一步步接近遞迴出口,即迴圈不變數是不是為真
3 證明 小問題得到解決-》原始問題也得到解決 。
思想-》產生規則-》證明規則的正確性
如此反覆,使你有乙個用遞迴思想思考問題的習慣
對於遞迴的理解
有很多時候我們可能會遇到使用遞迴的問題來解決問題,其中我感覺遞迴最重要的是把大的問題一步步地進行分解成小的問題 所以首先要對問題進行分割,其中可能涉及到了一些分割問題的技巧 其次,分割成小問題之後我們要確定遞迴的方法中的引數,有多少個變數在變化,需要傳進方法中引數有多少,遞迴呼叫的時候引數該如何變化...
個人對於堆疊的理解(簡單通俗)
最近在做安裝包 inno setup 也沒好好看c 然後安裝包出了點小問題,說是堆溢位,自己也沒理解透堆疊這個概念,在這裡我就簡單的總結一下。1.堆在c 中,只有程式設計師自己分配的記憶體才會儲存到堆中,比如int b int malloc sizeof int 1 這就算自己手動分配的乙個,然後它...
個人對於架構設計的理解
public static idbservice dbservice 在基於提供的基礎服務中,除了dbutilities,還包括company.web.iconfiguration,company.web.icache服務。configuration服務主要作用是記錄基本客戶資訊和系統處理基礎資訊,...