美文网首页
OC -递归算法

OC -递归算法

作者: 东了个尼 | 来源:发表于2019-01-25 15:51 被阅读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)]

相关文章

  • 常见算法

    OC整理递归和排序算法

  • OC -递归算法

    递归只是让解决方案更加清晰,并没有性能上的优势。 由于递归函数调用自己,因此编写这样的函数很容易出错进而导致无限循...

  • OC阶乘计算

    OC中的阶乘算法,原理就是递归。在OC中也可以用c语言来实现。

  • 快速幂模板

    递归算法 非递归算法

  • python递归算法、尾递归算法及优化

    文章概述 递归算法和尾递归概述递归算法的优化 递归算法 介绍:递归算法是计算机编程领域非常重要的一种算法,采用分而...

  • C++ 递归算法

    递归算法,尾递归算法求阶乘!

  • Java递归算法详解

    递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的...

  • 矩阵链乘法

    递归算法: 迭代算法: 分析 递归算法:规模为n的问题,有n个递归,每个递归又有相应矩阵个数个递归,故T(n)=T...

  • 【Python】(十一)从汉诺塔看Python中的递归问题

    递归的原则 递归算法必须具有基本情况。 递归算法必须改变其状态并向基本情况靠近。 递归算法必须以递归方式调用自身 ...

  • 一、算法

    目标 递归算法查找算法算法分析十大排序算法 递归算法 什么是递归递归,在数学与计算机科学中,是指在函数的定义中使用...

网友评论

      本文标题:OC -递归算法

      本文链接:https://www.haomeiwen.com/subject/jszmjqtx.html