Recursive
- 遞迴就是在程式中自己呼叫自己 ( Self Calling )
- 遞迴演算法 可用來實現 Divide and Conquer 策略
- 將一個大問題先拆成數個小問題來分別對付
- 如果新的問題和原來的問題性質完全相同的話, 就可以用遞迴
- 寫遞迴時要記得設終止條件,否則容易產生無窮迴圈
#include <stdio.h>
#include <stdlib.h>
int input;
int max;
char output[30];
void recursive(int, int, int);
int main() {
while(scanf("%d",&input)!=EOF){
max=input*2;
recursive(0, 0, 0);
}
return 0;
}
// num : 括號總數量
void recursive(int left, int right, int num) {
if(left > input || right > left)
//不合法情形,左括號過多 或 右括號多於左括號
return;
if(num == max) {
// 括號總數量已滿,進行輸出
// 陣列的結尾 為 '\\0'
output[num] = '\\0';
printf("%s\\n", output);
return;
}
// 將左括號洗入陣列,左指標+1,總數量也+1
output[num] = '(', recursive(left + 1, right, num + 1);
output[num] = ')', recursive(left, right + 1, num + 1);
}