递归的有关问题 怎样跑的

递归的问题 怎样跑的?
#include<iostream>
using namespace std; 

void main()
{
void combination( int m, int n, int start= 1, int deep= 0);
void permutation( int m, int deep= 0);
int m,n;
cin >>m >>n;
combination( m, n);
cin >>m;
permutation( m);
}

 void permutation( int m, int deep= 0)//排列
 {
static int Array[1000];
static bool Flag[1000];

if ( deep == m)    //递归结束判断
{
for( int i= 0; i< deep; i++)
cout<< Array[i];
cout<< " ";
return ;

for (int i= 1; i <=m ;i++)
{
if( Flag[i]== true)
continue; //该数用过不用
Array[deep]= i;
Flag[i]= true;
permutation( m, deep+1);
Flag[i]= false;
}
if( deep == 0)  //递归程序最终结束时换行
cout<< endl;
 }
 
void combination( int m, int n, int start= 1, int deep= 0)//组合
{
static int Array[1000];
if( n == 0) //递归结束判断
{
for( int i= 0; i < deep; i++) //输出
cout<< Array[i];
cout<< "  ";
return; //跳出递归
}
for( int i= start; i <= m-n+1; i++)
{
Array[deep]= i;
combination( m, n-1, i+1, deep+1);
}
if( deep == 0)//递归程序最终结束时换行
cout<< endl;
}
      
   例如 输入  3 2   输出 12 13 23  输入3 输出 123 132 213 231 312 321这个combination函数是怎样跑的?   我怎么感觉 只能跑出一个数组(12) 然后就返回了,,下面的 2个数组  是怎样循环输出的?
递归

------解决方案--------------------
在递归函数递归的地方打上断点(F9),然后按F5调试运行,在Watch窗口填写某个变量的名字,即可看到该变量当前的值
------解决方案--------------------
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出