遞迴思想:把規模為 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 由零個或多個字元組成的有限序列 是用一組位址連續的儲存單元來儲存串中的字串行,按照預定義的大小,為每個定義的字串變數分配乙個固定長度的儲存區,一般用定長陣列來定義 一般用順序儲存 樸素的模式匹...