首先,經典的漢諾塔問題用遞迴來實現將會很簡單,**如下:
void move(char pos1, char pos2)
void hannoi(int n, char pos1, char pos2, char pos3)
else
}
由兩個函式來實現完成,遞迴結束的終點是只有乙個盤子是將盤子從pos1移動動到pos3上,若盤子個數大於乙個,則最上面小盤子要先移動到pos3上,在移動至pos2上,**實現為:hannoi(n - 1, pos1, pos3, pos2);呼叫一次move函式,然後底下最大的盤子移動至pos3,上面在pos2上的盤子要先移動到pos1上,在一次移動到pos3上,**實現為:hannoi(n - 1, pos2, pos1, pos3);每次移動後都將盤子的數目減一,直至剩餘乙個盤子時,遞迴結束。
void reversestring3(char *string)
*(string + len - 1) = tmp;
}
利用庫函式先檢測出字串的長度len,利用tmp變數來儲存字串的首位址元素:char tmp = *string;,然後將首位址元素的內容用字串最後乙個元素替代:*string = *(string + len - 1);將字串最後乙個元素用『\0』填入:*(string + len - 1) = '\0';依次字串位址+1檢測,直至遇到『\0』結束遞迴,將儲存在tmp中每次字串的首位址元素的值賦給最後乙個元素。
『遞迴』思想來處理問題需要保證兩個條件:
1:要有終止遞迴的條件,
2:要不斷呼叫自己本身。
利用二分思想來尋求解
1.長城守衛 beijing guards,cerc 2004,la3177 n 個人圍成乙個圈,其中第 i i 個人想要有 riri 個不同的禮物。相鄰的兩個人可以聊天,炫耀自己的禮物。5 個人,每個人都要乙個禮物,則至少要 3 3 種禮物。如果把這 3 3 種禮物編號為 1,2 31,2,3 則...
二 利用動態規劃的思想來解決馬爾可夫決策問題
動態規劃 dynamic programming 是非常經典的求解最優解的演算法思想,它要求問題滿足最優子特性才可以使用。我們對馬爾可夫問題的定義是乙個五元組 假設上圖每個節點上都有乙個值,現在要求從頂點經過一條路徑到達最底層的某乙個節點,使得路徑上值之和最大。按照動態規劃的思想,我們很容易可以想到...
利用遞迴思想實現鍊錶逆置
演算法思想 如果採取不建立新的單鏈表的方法逆置鍊錶,我們就利用遞迴的思想實現鍊錶的逆置。首先設定乙個指向原鍊錶最後乙個結點5的指標newhead,並且由於完成逆置後的鍊錶的頭結點是結點5,所以newhead始終指向結點5。第一次回溯 head next null的意義在於能夠使結點1中的next指標...