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

看一下运行的效果:

猜你喜欢

转载自blog.csdn.net/c1392851600/article/details/84641115