递归的思路和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
看一下运行的效果: