递归只是让解决方案更加清晰,并没有性能上的优势。
由于递归函数调用自己,因此编写这样的函数很容易出错进而导致无限循环。例如,假设你要编写一个像下面这样的倒计时函数
3...2...1 为此,你可以用递归的方式编写,如下所示。
def countdown(i):
print I
countdown(i-1)
如果你运行上述代码,将发现一个问题:这个函数运行起来没完没了。

因此编写递归函数的时候,每个递归函数都有两部分:基线条件和递归条件,递归条件指的是函数自己,而基线条件指的是函数不再调用自己,从而避免形成无限循环。
我们以刚刚的countdown函数分析
def countdown(i):
print I
if I<=0: ----基线条件
return
else: -----递归条件
countdown(i-1)

举个简单解决实际问题的栗子😊(实现代码为OC)
下面是一个多维度的数组,要求把数组中所有的元素取出来。
NSArray *testArray = @[@"1",@3,@[@"2",@"3"],@[@"4",@"5",@[@[@6,@"7"],@"8"]]];
如果使用递归算法的话 那么实现方式应该是如下:
#pragma mark -- 递归
-(NSMutableArray *)outputArray:(NSArray *)mutArray
{
for (int i = 0;i< mutArray.count ; i++) {
if ([mutArray[i] isKindOfClass:[NSArray class]]) {
[self outputArray:mutArray[I]];
}else{
[_tmpArray addObject:mutArray[I]];
}
}
return _tmpArray;
}

得到结果

[图片上传中...(屏幕快照 2019-01-25 下午4.04.54.png-141ef6-1548403536257-0)]
网友评论