資料結構與演算法 五 c 語言遞迴與漢諾塔實現

2021-07-10 12:06:16 字數 1263 閱讀 7842

遞迴思想:把規模為 n 的問題減小到 n-1 來解決

技巧:不要考慮具體程式是怎麼實現的,而是關注如何把規模為 n 的問題減少到 n-1

遞迴求階乘 和 遞迴求 1+2+...+n 的和

//

// main.c

// testfactorial

//// created by lan on 16/3/12.

//// 規模 n 的解決依賴於 n-1 的解決

#include // 求 n 的階乘

long f(long n) else

}// 求 1 + 2 + .. + n 的和

long f1(long n) else

}int main(int argc, const char * argv)

輸出結果:

120

15program ended with exit code: 0

漢諾塔

//

// main.c

// testhanoi

//// created by lan on 16/3/13.

//#include void hanoi(int n, char a, char b, char c) else }/*

盤子數 程式執行次數

n = 1 1

n = 2 3

n = 3 7

......

漢諾塔的複雜度為 2 的 n 次方減 1

*/int main(int argc, const char * argv)

輸出結果:

輸入移動盤子的個數 n = 3

將編號為 1 的盤子直接從 a 柱子移到 c 柱子

將編號為 2 的盤子直接從 a 柱子移到 b 柱子

將編號為 1 的盤子直接從 c 柱子移到 b 柱子

將編號為 3 的盤子直接從 a 柱子移到 c 柱子

將編號為 1 的盤子直接從 b 柱子移到 a 柱子

將編號為 2 的盤子直接從 b 柱子移到 c 柱子

將編號為 1 的盤子直接從 a 柱子移到 c 柱子

program ended with exit code: 0

資料結構與演算法 遞迴

一 概念 遞迴是一種高效 簡介的編碼技巧,一種應用很廣泛的演算法,比如dfs深度優先搜尋,前中後序二叉樹遍歷等都是使用遞迴。方法或函式呼叫自身的方式成為遞迴呼叫,呼叫稱為遞,返回成為歸 所有遞迴問題都可以用遞迴公式來表示 二 遞迴優缺點 優點 簡潔 缺點 堆疊溢位風險 可根據調整遞迴呼叫的最大深度來...

資料結構與演算法(五)

雙端鍊錶和雙向鍊錶 一.雙端鍊錶 1.什麼是雙端鍊錶 鍊錶中儲存著對最後乙個鏈結點的引用的鍊錶 2.從頭部進行插入 要對鍊錶進行判斷,如果為空則設定尾結點為新新增的結點。3.從尾部進行插入 如果鍊錶為空,則直接設定頭結點為新新增的結點,否則設定尾結點的後乙個結點為新新增的結點。4.從頭部進行刪除 判...

資料結構與演算法(五)

三根針xyz,x上64個圓盤 設計思路 if n 1時,x z else 執行n 1的操作,直到n 1 1 由零個或多個字元組成的有限序列 是用一組位址連續的儲存單元來儲存串中的字串行,按照預定義的大小,為每個定義的字串變數分配乙個固定長度的儲存區,一般用定長陣列來定義 一般用順序儲存 樸素的模式匹...