資料結構和演算法(遞迴和分治思想)

2021-09-24 16:19:23 字數 1925 閱讀 7086

遞迴:

乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱作遞迴函式

分治思想:

將乙個問題分為幾個小的模組,逐一解決

輸入任意長度的字元,並反向輸出(遞迴):

#include void print()

if( '#' != a )

}int main(void)

斐波那契數列實現(迭代+遞迴)

/*斐波拉契數列*/

#include int recur(int n);

/*迭代演算法實現*/

int main(void)

printf("\n");

for(i=0 ; i<40 ; i++)

printf("\n", b[39]);

return 0;

}/*遞迴演算法實現*/

int recur(int n)

else

return num;

}

折半查詢(迭代和遞迴)

#include #define maxsize 10

int a[maxsize] = ;

int max = maxsize - 1, min = 0, mid;

void halfhold(int a, int b)

}if(a[mid] > b)

else if(a[mid] < b)

else if(a[mid] == b)

}int main(void)

else if (a[mid] < b)

else if (a[mid] == b)

/*if (mid == max || mid == min)}*/

}if(a[mid] != b)

halfhold(a, b);

return 0;

}

漢諾塔問題:

#include void move(int n, char x, char y, char z)

else

}int main(void)

八皇后問題:

#include #include int count = 0;

int notdanger(int row, int j, int(*chess)[8])

}//判斷左上方

for(i=row, k=j; i>=0 && k>=0; i--, k--)

}//判斷右下方

for(i=row, k=j; i<8 && k<8; i++, k++)

}//判斷右上方

for(i=row, k=j; i>=0 && k<8; i--, k++)

}//判斷左下方

for(i=row, k=j; i<8 && k>=0; i++, k--)

}if( flag )

else

}void eightqueen(int row, int col, int (*chess)[8])

}if( 8 == row ) //列印結果

printf("\n");

}printf("\n");

count++;

}else

*(*(chess2+row)+j) = 1; //再將判斷不危險的位置賦值1

eightqueen(row+1, col, chess2); //重點理解區域}}

}}int main(void)

}eightqueen(0, 8, chess);

printf("there are %d results\n", count);

return 0;

}

遞迴和分治思想1 資料結構和演算法31

讓程式設計改變世界 change the world by program 妹子,甲魚哥今天給你講乙個故事吧,從前我有個小弟,酷愛探險,有一次他進了乙個山洞,然後又出來,然後又進去,然後又出來,然後又進去,然後又出來。後來他很開心 艹,你說什麼呢?妹子悟性真高 事實上遞迴就跟雞生蛋蛋又生雞的道理一樣...

資料結構與演算法(3) 遞迴與分治思想

遞迴思想 遞迴就是有去 遞去 有回 歸來 有去 是指 遞迴問題必須可以分解為若干個規模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決,就像鑰匙可以開啟所有門上的鎖一樣 有回 是指 這些問題的演化過程是乙個從大到小,由近及遠的過程,並且會有乙個明確的終點 臨界點 一旦到達了這個臨...

資料結構演算法 遞迴 分治

該部落格結合leetcode原題介紹了可以使用 分治 思想解決的常見題目。leetcode 50 pow x,n 1 暴力解法 多少次冪,就乘上多少次x。但是提交的話會超時。時間複雜度 o n 空間複雜度 o 1 class solution object defmypow self,x,n typ...