首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问一下关于递归函数

2013-04-20 
请教一下关于递归函数我想问问有关递归函数的执行顺序问题,就如汉诺塔的问题:三根柱子的编号为 a,b 和

请教一下关于递归函数

我想问问有关递归函数的执行顺序问题,就如汉诺塔的问题:
三根柱子的编号为 "a","b" 和 "c",一开始所有盘子在a柱,最终目标是c柱子。
每次搬动的输出格式为     "源柱子-->目标柱子"。
以下为递归的程序
void f(int n,char a,char b, char c)     //n为盘子个数
{
           if(n==1)
                printf("%c-->%c\n",a,c);
           else
           {
                   f(n-1,a,c,b);
                printf("%c-->%c\n",a,c);
                   f(n-1,b,a,c);
           }
}


我想问的是递归函数执行到else里面f(n-1,a,c,b)的时候是再调用该函数,直到n==1,然后才到printf?还是只执行一次f(n-1,a,c,b);然后就直接执行下一个printf?
最好能解释一下执行过程
递归 C 执行过程
[解决办法]
想写但发现自己也写不清楚。。。捉急
不如楼主自己单步运行看看方便些
[解决办法]
楼主叙述有问题。。
但是可以说明的是,     f(n-1,a,c,b);
                printf("%c-->%c\n",a,c);这两句第二句必然是在第一句执行完之后执行的,但是在第一句执行的过程中因为其是递归函数,中间中间会有printf执行,但不是这里的第二句。
[解决办法]
F10单步运行 F11进入函数内部单步运行  vc6.0和vs2010都是如此
其他编译器的话百度一下
你应该是没有按F11
[解决办法]
不知道楼主的话,我理解的正不正确,递归函数执行到else里面时,把f(n-1,a,c,b)执行完,也就是说把里面的递归函数都执行完,直到n==1,然后才到下一句的printf,可以把n值打印出来看的就清楚点了,每一次递归的n值
[解决办法]
调用多少次就执行多少次,
假设第一次传入n==3,则调用两次,
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出

热点排行