为什么我们需要递归?

Joy*_*rya 0 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);
  }
Run Code Online (Sandbox Code Playgroud)

没有递归(这里我得到一个给定数字的总和假设数字是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)
      {
      }
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*oun 7

总是可以将递归函数作为迭代函数,反之亦然(图灵说).

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

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

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

  • +遍历树使递归更有意义.遍历链表甚至可以更简单,递归操作很简单.正确工作的正确工具. (3认同)