之前还是有些漏,现在补充,望高手指教一下
hanoi(3,a,b,c)
//执行这个函数
{
if(0)
//约束条件还没有触发,所以执下面语句
...
hanoi(2,a,c,b);
//准备调用hanoi(2,a,c,b),这个所谓"自己调用自己"迫使hanoi(3,a,b,c)入栈,保留hanoi(3,a,b,c)一些数据
nove(a,c);
//等上面函数执行完,才执行这个
hanoi(2,b,a,c);
//等上面函数执行完,才执行这个
}
hanoi(2,a,c,b)
//执行hanoi(2,a,c,b)函数,从头执行到尾
{
if(0)
//约束条件还没有触发,所以执下面语句
...
hanoi(1,a,b,c);
//准备调用hanoi(1,a,b,c),迫使hanoi(2,a,c,b)入栈,保留hanoi(2,a,c,b)一些数据
nove(a,b);
//等上面函数执行完,才执行这个
hanoi(1,c,a,b);
//等上面函数执行完,才执行这个
}
hanoi(1,a,b,c)
//执行完这个函数,退栈hanoi(2,a,c,b),记住从那地方调用,就从那地方回去,执行下一条语句.
{
if(1)
//约束条件触发,所以打印出语句
printf
a->c
}
hanoi(2,a,c,b)
//执行这个函数,记住从那地方调用,就从那地方回去.
{
if(0)
//约束条件还没有触发,所以执下面语句
...
hanoi(1,a,b,c);
//这个执行完,所以执行下面语句
nove(a,b);
//打印 printf
a->b
hanoi(1,c,a,b);
//准备调用hanoi(1,c,a,b),迫使hanoi(2,a,c,b)入栈,保留hanoi(2,a,c,b)一些数据
}
hanoi(1,c,a,b)
//执完这个函数,退栈hanoi(2,a,c,b), 记住从那地方调用,就从那地方回去,执行下一条语句.
{
if(1)
//约束条件触发,所以打印出语句
printf
c->b
}
hanoi(2,a,c,b)
//下面没有执行语句,结束这个函数,现在退栈hanoi(3,a,b,c), 记住从那地方调用,就从那地方回去,执行下一条语句.
{}
hanoi(3,a,b,c)
//执行这个函数
{
if(0)
//约束条件还没有触发,所以执下面语句
...
hanoi(2,a,c,b);
//执行完这个函数,开始执行下面函数
nove(a,c);
//打印 printf
a->c
hanoi(2,b,a,c);
//准备调用hanoi(2,b,a,c),迫使hanoi(3,a,b,c)入栈,保留hanoi(3,a,b,c)一些数据
}
hanoi(2,b,a,c)
//再一次,再行这个函数
{
if(0)
//约束条件还没有触发,所以执下面语句
...
hanoi(1,b,c,a);
//准备调用hanoi(1,b,c,a),迫使hanoi(2,b,a,c)入栈,保留hanoi(2,b,a,c)一些数据
nove(b,c);
//等上面函数执行完,才执行这个
hanoi(1,a,b,c);
//等上面函数执行完,才执行这个
}
hanoi(1,b,c,a)
//执完这个函数,退栈hanoi(2,b,a,c),记住从那地方调用,就从那地方回去,执行下一条语句.
{
if(1)
//约束条件触发,所以打印出语句
printf
b->a
}
hanoi(2,b,a,c)
//继续执行这个函数
{
if(0)
//约束条件还没有触发,所以执下面语句
...
hanoi(1,b,c,a);
//这个函数己经完成
nove(b,c);
//执行这个函数,开始打印
b->c
hanoi(1,a,b,c);
//准备调用hanoi(1,a,b,c),迫使hanoi(2,b,a,c)入栈,保留hanoi(2,b,a,c)一些数据
}
hanoi(1,a,b,c)
//执完这个函数,退栈hanoi(2,b,a,c),记住从那地方调用,就从那地方回去,顺便执行下一条语句.
{
if(1)
//约束条件触发,所以打印出语句
printf
a->c
}
hanoi(2,b,a,c)
//下面没有执行语句,结束这个函数,现在退栈hanoi(3,a,b,c), 记住从那地方调用,就从那地方回去,执行下一条语句.
{}
hanoi(3,a,b,c)
//下面没有执行语句,结束这个函数,出栈与入栈在这里划上句号.
{}
p.s 这个最好有汇编基础,不然不好明白
[
本帖最后由 点线面 于 2011-2-1 16:11 编辑 ]