while循环功能?

时间:2011-12-03 06:44:33

标签: iphone objective-c xcode loops

我想知道是否可以在代码中使用这样的东西。 如果我有一段代码我想执行,那么在程序的许多部分都是一样的 它使用了这个版本的while循环,这会有用吗? (我知道我可以使用while循环,我只是认为这将是一个有趣的想法探索)

NSMutableArray *objects;
-(void) RemoveObjectLoop
{
    [self RemoveObjectAtZero];
}

-(void) RemoveObjectAtZero
{
    if([objects count] > 0)
    {
        [objects removeObjectAtIndex:0];
        [self RemoveObjectLoop];
    }
}

不要多次写出while循环,而是执行[self RemoveObjectLoop]。 这可以用于项目吗? 有没有你不想使用它的实例?

编辑:我知道这个例子很糟糕,我想不出别的什么。 如果可以的话,请在答案中加入一个例子。谢谢!

2 个答案:

答案 0 :(得分:3)

这称为递归。在没有针对它进行优化的语言中,它仅适用于中等大小的集合,因为最终您将耗尽堆栈空间来保存函数所需的帧。它也比普通循环慢一点(再次,除非编译器优化它)。

对于某些算法,它非常适合。例如,深度优先搜索自然地实现为递归函数。不过,我认为这不是其中之一。

答案 1 :(得分:1)

在递归中,你通常不会有这样的循环函数调用。该功能只是在努力得出结论时自称。所以你的例子将成为:

-(void) RemoveAll
{
    if([objects count] > 0)
    {
        [objects removeObjectAtIndex:0];
        [self RemoveAll];
    }
}

某些语言(如Logo)会自动优化尾递归(递归调用是函数的最后一行)。我从来没有听说过Objective-C那样做,如果有的话,我会感到惊讶。

通常(你的问题就是你所注意到的一个例子)递归例子是设计的,并且可以更好地非递归地解决。 Here are some real-world examples of recursion