代码分析:
recursion(1)
{
while(1<=5)
{
combination[1] = 1;
recursion(2)
}
}
recursion(2)
//recursion(1)要压栈,记录 i=1,还没有执行
完,因为for()还没有结束循环
{
while(2<=5)
{
combination[2] = 2;
recursion(3)
}
}
recursion(3)
//recursion(2)要压栈,记录 i=2,还没有执行
完,因为for()还没有结束循环
{
while(3<=5)
{
combination[3] = 3;
recursion(4)
}
}
recursion(4)
//recursion(3)要压栈,记录 i=3,还没有执
行完,因为for()还没有结束循环
{
while(4<=5)
{
combination[4] = 4;
if(4==4)
{
printf();
//
开始打印 1 2 3 4
}
}
}
recursion(4)
// 继续执行循环,直到循环结束
{
while(5<=5)
{
combination[4] = 5; //0,1 2 3 5
if(4==4)
{
printf();
//
开始打印
1 2 3 5
}
}
}
recursion(4) //循环结束
recursion(3)
//之前压栈,现在退栈,结束上次循环,i现在为
4,原因是循环还没有结束
{
while(4<=5)
//i之前是3
{
combination[3] = 4; //0,1 2 4 5
recursion(4)
}
}
recursion(4)
//recursion(3)要继续压栈,记录 i=4,还没有
执行完,因为for()还没有结束循环
{
while(4<=5)
{
combination[4] = 4;
// 0, 1 2 4 4
if(4==4)
{
if(k!=4)
}
}
}
recursion(4)
// 继续执行循环,直到循环结束,且打印数据
{
while(5<=5)
{
combination[4] = 5;
// 0, 1 2 4 5
if(4==4)
{
printf();
//
1 2 4 5
}
}
}
recursion(4) //循环结束
recursion(3)
//之前压栈,现在退栈,结束上次循环,i现在为
5,原因是循环还没有结束
{
while(5<=5)
//i之前是3
{
combination[3] = 5; //0,1 2 5 5
recursion(4)
}
}
recursion(4)
//recursion(3)要继续压栈,记录 i=5,还没有
执行完,因为for()还没有结束循环
{
while(4<=5)
{
combination[4] = 4;
// 0, 1 2 5 4
if(4==4)
{
if(k!=4)
}
}
}
recursion(4)
// 继续执行循环,直到循环结束
{
while(5<=5)
{
combination[4] = 5;
// 0, 1 2 5 5
if(4==4)
{
if(k!=4)
}
}
}
recursion(4) //循环结束
recursion(3) //弹出recursion(3),但循环结束
recursion(2) //之前压栈,现在退栈,结束上次循环,i现在为
3,原因是循环还没有结束
{
while(3<=5)
//之前是i=2
{
combination[2] = 3; // 0,1 3 5 5
recursion(3);
}
}
PS:单单函数执行都有156次,实在没有充分完全表达出来,递归过程大家过程应该明白吧
[
本帖最后由 点线面 于 2011-1-4 15:49 编辑 ]