OC -递归算法

2019-01-25  本文已影响0人  东了个尼

递归只是让解决方案更加清晰,并没有性能上的优势。

由于递归函数调用自己,因此编写这样的函数很容易出错进而导致无限循环。例如,假设你要编写一个像下面这样的倒计时函数

3...2...1 为此,你可以用递归的方式编写,如下所示。

def countdown(i):
print I 
countdown(i-1)

如果你运行上述代码,将发现一个问题:这个函数运行起来没完没了。

屏幕快照 2019-01-25 下午4.00.10.png

因此编写递归函数的时候,每个递归函数都有两部分:基线条件和递归条件,递归条件指的是函数自己,而基线条件指的是函数不再调用自己,从而避免形成无限循环。
我们以刚刚的countdown函数分析

def countdown(i):
print I

if I<=0:  ----基线条件
return 
else: -----递归条件
countdown(i-1)

屏幕快照 2019-01-25 下午4.04.54.png

举个简单解决实际问题的栗子😊(实现代码为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 下午3.49.26.png

得到结果


屏幕快照 2019-01-25 下午3.49.43.png

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

上一篇 下一篇

猜你喜欢

热点阅读