1. 程式人生 > >C++ primer plus書之--C++遞迴呼叫

C++ primer plus書之--C++遞迴呼叫

遞迴的思路和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

看一下執行的效果: