2014-10-19 73 views
-2

使用嵌套循环或递归函数的输出有什么区别?在考虑条件时,哪种方法最适合生成组合?嵌套循环和递归函数有什么区别?

+0

这取决于您要解决的具体问题。你不会一直使用一个而不是其他的。注意“[了解递归](http://stackoverflow.com/questions/717725/understanding-recursion)” – 2014-10-19 17:11:49

回答

1

递归算法从同一个函数(递归)中调用一个函数。是否执行递归是基于某种条件。

function foo() 
    { 
      ?/ do work 
      if(condition) 
        foo(); 
    } 

迭代算法通常会调用函数一些次数(n)。

function foo() 
    {} 

    for(int i = 0; i < n; i++) 
      foo(); 

递归函数时需要重复操作某些数据块和的是否重复的条件是依赖于前一个操作,通常使用。在数学中计算一个截断的无穷级数就是一个例子。

当条件不依赖于以前的操作时,通常会使用迭代函数。反转矩阵具有预定义的n。

这两种方法都可以用于大多数目的,但您通常会发现在特定情况下一种方法比另一种方法更容易。

尽管有递归的意识,但仍然存在调用堆栈溢出。如果可以保证算法会收敛并在一定数量的递归内结束,最好只使用它。

0

递归和迭代(循环)是一般意义上不可比较的不同策略。对于某些算法,您可能同时具有迭代和递归版本(例如阶乘或斐波那契数字),对于其他算法,其中一个可能比另一个更直观(例如递归树行走)。

无论算法遵循何种策略,输出必须相同,否则您将实现不同的算法。

底线,它真的取决于你将使用什么算法。

1

递归可以被看作是“做”循环的另一种方式。主要优点是代码可读性,正如你在这个Stackoverflow question中看到的,在这种情况下,当有很多嵌套循环时。

但要小心,因为Python(1000)有一个小的递归限制。您可以通过键入

>>>import sys 
>>>print sys.getrecursionlimit() 
1000 

对于递归的其他案件VS循环的概述验证,检查this pdf。但是,如this Stackoverflow answer中所述,您应该坚持Python的纯迭代方案。