红色预警:递归有风险,用到需谨慎(递归一定一定一定需要有出口(结束的地方))
步骤:
1.需要事先特别熟悉一个递归算法(我选阶乘)
2.掌握一种工具的调试。(我用VC6.0)
算法:
算法:给一个数N,要求N *(N-1)* ... * 1。
算法分析:显然,每次只要改变参数就好了。
熟悉VC6.0的调试:
这里会给出调试一些步骤,无意深究工具的调试,其他靠想:
建议先写个小例子,非递归,练练调试,然后写这个算法,调试。
调试简单操作:
一,认识调试功能 在组建(构建)菜单中,点击开始调试(启动调试),在其下级子菜单中,包含了启动调试器运行的各项子命令(如图1所示)
第1,2,3步。
4是下断点的。断点就是程序从这里停。 |
代码:
#include <iostream.h>
//写一个要调用的递归程序 int jiecheng(int n); int jiecheng(int n) { if(n <0)返回false; if(n == 0)返回1; 如果(N> 0) 返回n * jiecheng(n-1); }
//主程序中掉用递归程序 int main() { int n; CIN >> N; int answer = jiecheng(n); cout <<“答案是:”<<答案<< endl; } |
或许不太美观,但不管这么多了。(反正功能是一样的,我就开始调试了)
调试:
这个就发不了图片了。
总结:
这里输入的Ñ为4。
它每次都进里面了,每次都是N> 0的那个,然后每次Ñ就减少了1,然后当这次Ñ为1进来的时候,正变成0了,然后Ñ再进来的时候,变成(0)= 1.1 *变成(0)= 1,2 *变成(1)= 2,3 *变成(2)= 6.4 *变成(3)= 24,返回到主函数中。
总的来说,好像是什么东西改变着进去了,进到头了,(递归的尽头),就又按着层层的顺序(与进去的顺序正好相反)出来了。