遞迴和回溯

2022-06-11 13:30:11 字數 1662 閱讀 7909

經典遞迴題目:  漢諾塔問題

1 #include 2

using

namespace

std;3//

x為起點,y為跳板,z為終點

4void hannuota(int n,char x,char y,char

z) 13}

1415

intmain()

view code

分治法入門之二分查詢

/*

分治法--二分查詢

*/#include

using

namespace

std;

//陣列不能為亂序,必須要遞增或遞減。要是有多個數相等的話就需要修改程式

//q為下界,p為上界 x為查詢數

int a[10]=;

int binsearch(int q,int p,int

x)int

main()

view code

排序演算法:

歸併排序:

#includeusing

namespace

std;

int a[10]=;

void heb(int low,int mid,int

high);

void fenlei(int low,int

high)

}void heb(int low,int mid,int

high)

else

//前後兩端進行比較,將小的那個丟在b裡面

}

//如果前半段有剩餘的

if(h<=mid)

else

//如果後半段有剩餘

for(k=j;j<=high;j++)

b[i++]=a[k];

//將b中的都丟給a

for(k=low;k<=high;k++)

a[k]=b[k];

}int

main()

view code

快速排序

#includeusing

namespace

std;

int a[9]=;

void swap(int &a,int &b)

}void quicksort(int a,int low,int

high)

while(low!=high)

quicksort(a,i,low-1);//

前半段排序

quicksort(a,low+1

,j);

}int

main()

view code

最後是乙個能夠快速呼叫排序的方法,不用一點一點的把**寫出來

匯入標頭檔案使用sort排序

#include#include

using

namespace

std;

bool com(int a,int

b)int

main()

; sort(a,a+10

,com);

for(i;i<10;i++)

cout

}

view code

回溯和遞迴的區別

最近看資料結構,發現用到了很多遞迴和回溯的問題,實在是不知道這兩具體有啥區別,最近查了點資料,大概總結一下。遞迴 為了描述問題的某一狀態,必須用到該狀態的上一狀態,而描述上一狀態,又必須用到上一狀態的上一狀態 這種用自已來定義自己的方法,稱為遞迴定義。形式如 f n n f n 1 if n 0,f...

回溯 八皇后問題(遞迴和非遞迴)

8皇后問題 如何在 8 x 8 的西洋棋棋盤上安排 8個皇后,使得沒有兩個皇后能互相攻擊?如果兩個皇后處在同一行 同一列或同一條對角線上,則她們能互相攻擊。解向量為長度為8 的陣列,記為 solution 因為共有 8個皇后,而棋盤剛好為 8 8,所以每一行肯定會有乙個皇后,那麼我們約定 solut...

leetcode題解 遞迴和回溯法

現在我們來看遞迴演算法中非常經典的思想回溯法,這樣的演算法思想通常都應用在一類問題上,這類問題叫做樹型問題,這類問題他本身沒有定義在一顆二叉樹中,但我們具體分析這個問題時就會發現解決這個問題的思路本質是一顆樹的形狀。解題思路比如我們輸入的digits 23 2能代表abc三個字母,當2代表a時,3代...