Recursion in c++

#include<stdio.h>
#include<conio.h>
#define N 21
int n, p[N], b[N], d = 0;
void khoitao() {
	printf("nhap n  = ");
	scanf_s("%d", &n);
	for (int i = 1; i <= n; i++) {
		b[i] = 1;
	}
}
void xuli() {
	int i;
	d++;
	printf("\nhoan vi thu %3d", d);
	for (i = 1; i <= n; i++) {
		printf("%3d", p[i]);
	}
}
void hoanvi(int k) {
	int j;
	for (j = 1; j <= n; j++) {
		if (b[j]==1) {
			p[k] = j; b[j] = 0;
			if (k == n) {
				xuli();
				
				_getch(); 
					return;
			}
			else 
				hoanvi(k + 1);
				b[j] = 1;
		
		}
	}
}
int main() {
	khoitao();
	hoanvi(1);
	_getch();
	return 0;
}

ai giải thích giùm em tại sao kết quả lại ra dc 1 2 3 vs ak thực sự e chưa hiểu đệ quy lắm

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?