以下有两个递归函数,
如果value初始值传入1, 则递归函数1的控制台输出value 顺序为 1,2,3,4,5
递归函数2的控制台输出value 顺序为 5,4,3,2,1,
//递归函数1
- (void)recursionNum:(int)value
{
if (value > 5)
{
return;
}
NSLog(@"value==%d",value);
[self recursionNum:value+1];
}
//递归函数2
- (void)recursionNum:(int)value
{
if (value > 5)
{
return;
}
[self recursionNum:value+1];
NSLog(@"value==%d",value);
}
函数1好理解,为什么函数2的输出会倒过来呢?
我们知道函数没有执行完成,是不会返回结果的,而递归函数在反复调用自己,在没有进入终止条件之前,算是没有执行完成,所以没有返回结果 (有结果,但是不返回)!
那么每一次执行的结果放在哪呢? 这里函数用到了栈,每一次执行的结果都放到了栈里面.如上面函数2的第一次为1,push入栈,第二次执行结果为2,再push入栈....以此类推
栈的特性是先进后出(后进先出), 等递归进入终止条件(执行完毕),就开始返回结果了,所以从5开始释放,返回5,4,3,2,1