今天由一个例子来对递归函数执行过程进行简要的剖析。
递归,所用到的底层数据结构是栈。即遵循先进后出原则,保存、读取变量。
如果我们想要运用递归,必须满足两个条件:
1,确定初始条件。确定递归何时结束。
2,该问题能够用分治思想,将大问题分解为小问题。
每次,递归调用前,现将函数变量值压入栈;递归结束后,再将变量依次弹出。
下面是一个例子:
程序执行过程:
1.执行6-15行。
第一次入栈,num=4;
...
第五次,num=0;
DOS窗口打印:5 4 3 2 1 0
2.当num=0,执行8行。 if num==0,DOS窗口打印:1:0。注意,在返回之前,应先将栈销毁。
3.执行16-17行,依次将num弹出栈。
2:0
:::
______
______
2:4
:::
4.执行第18行,返回num=4。销毁num栈。
注意,如果没有第18行,这时候返回的是一个任意值。因为,在执行第17行后,num栈元素已经全部弹出,num此时变成一个任意值。
调试结果如下: