遞迴:
乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱作遞迴函式
分治思想:
將乙個問題分為幾個小的模組,逐一解決
輸入任意長度的字元,並反向輸出(遞迴):
#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...