为什么我们需要递归?

时间:2015-05-25 10:30:14

标签: c

使用递归然后循环(for,while,do-while)有什么好处?

使用递归(这里我得到一个给定数字的总和,假设数字是5然后5 + 4 + 3 + 2 + 1:

   #include<stdio.h>
   int sum(int n);
   void main()
    {
     int sums =0, n;
     scanf("%d",&n);
     sums = sum(n);
     printf("%d",sums);

       while (1)
        {

        }
    }

  int sum(int n)
  {
     if (n==1)
     return 1;
     return n + sum(n-1);
  }

没有递归(这里我得到一个给定数字的总和假设数字是5然后5 + 4 + 3 + 2 + 1:

  #include<stdio.h>

  void main()
   {
     int sum =0, n;
     scanf("%d",&n);
     for(int i=n;i>=1;i--)
      {
       sum = sum + i;
      }
      printf("%d",sum);

      while (1)
      {
      }
    }

3 个答案:

答案 0 :(得分:7)

你可以始终使递归函数成为迭代函数,反之亦然(Turing said)。

在某些情况下,最好使用递归(例如在树上旅行),在这种情况下“递归思考”更自然。但是,如果使用循环并不比递归更复杂和困难,我更喜欢它们。

递归在内存中成本更高,但有时它更清晰,更易读,使用循环可以提高性能,但递归对于程序员来说有时会更好(以及他的表现)。

决定使用什么 - 递归或迭代,取决于你想要实现什么,以及什么对你更重要(可读性?性能?),询问递归或迭代在某种程度上要求优雅或表现

答案 1 :(得分:2)

递归可以解决所有可以通过for循环解决的问题。但是通过for循环解决某些问题是困难的或完全不可能的。例如“ json”解析,“ xml”解析等。对于此类问题,应使用递归。某些动态问题可以通过递归而不是for循环轻松解决。对于一个难题,您不必考虑通过递归而不是for循环来解决问题。您只需形成Recurrence_relation。

答案 2 :(得分:1)

我更喜欢循环遍历递归函数。看看这是否有帮助:Read it