C++ primer plus書之--C++遞迴呼叫
阿新 • • 發佈:2018-11-30
遞迴的思路和java的思路一樣, 直接看demo:
// 遞迴 #include <iostream> using namespace std; const int Len = 66; const int Divs = 6; // 函式原型, 由於是陣列, 所以傳遞的是陣列的首地址 void divide(char arr[], int start, int end, int level); int main() { char arr[Len]; // 初始化都設定為空格 for (int i = 0; i < Len; i++) { arr[i] = ' '; } // 將最後一個字元設定為\0 arr[Len - 1] = '\0'; // 將頭尾兩個字元設定為| arr[0] = arr[Len - 2] = '|'; // 定義開始和結束位置 int start = 0; int end = Len - 2; cout << arr << endl; for (int i = 1; i <= Divs; i++) { divide(arr, start, end, i); cout << arr << endl; // 重置成空格 for (int j = 1; j < Len - 2; j++) { arr[j] = ' '; } } return 0; } void divide(char arr[], int start, int end, int level) { if (level == 0) return; int mid = (start + end) / 2; // arr[mid] = '|'; 這麼寫也可以的 *(arr + mid) = '|'; divide(arr, start, mid, level - 1); divide(arr, mid, end, level - 1); }
注意一點, 就是遞迴一定要有個條件能夠跳出遞迴, 不然的話會造成無法返回, 也就是不停的呼叫函式本身直到oom
看一下執行的效果: