以前遇见递归总会把其想像成一个黑盒子方法,不会尝试去理解它。
先看一段伪代码:
void recurs(argumentlist)
{
statements1;
if (test)
recurs(arguments);
statements2;
}
如果递归函数调用自己,则被调用的函数也将调用自己,这将无限循环进行下去,除非包含终止调用链的内容, 通常的方法将递归放在if语句中。
如上所示,test最终会为false终止调用。
只要if为true,每个recurs()调用都将执行statements1,然后再调用recurs,而不会执行statements2. 当if为false,当前调用会执行statements2。当前调用结束后,程序控制权将返回给调用它的recurs,而该recurs将会执行其statements2部分,然后结束,然后再将控制权返回给上一层调用,以此类推。
总而言之,如果recurs执行了5次递归调用,则第一个statements1部分,将按照调用顺序执行5次,然后statements2部分将以与函数调用相反的顺序执行5次。