递归算法学习

it2022-05-09  36

1.基本定义:递归就是函数或过程直接或间接调用本身的算法。

2.使用递归算法的要求:

   (1). 必须是重复工作,而且此工作可以多次分成多次重复的操作,且每次分开规模都要减小。

   (2). 重复操作之间要紧密相连,上一次操作为下一次做准备(通常前一次的输出作为下一次的输入)。

3.使用递归时应注意的问题:

   (1).使用递归时必须明确递归的结束条件,即递归出口

   (2).递归算法解题显得很简洁,但运行效率比较低;不提倡用递归算法来设计程序。

   (3).递归调用过程中系统为每一层的返回点和局部变量开辟栈来存储,递归次数多了可能会造成栈溢出,所以不提倡用递归设计程序。

4. 递归分类:直接调用和间接调用

    (1). 直接调用:函数或过程直接调用本身

    f(int x)

   {

  ...

  f(y);   ---------------->直接调用本身

  ...

    }

(2). 间接调用:两个方法或过程分别调用对方

      procedure a(形参)

  {

    .......

    procedure b(形参);------------------->调用过程b

    .......

  }

  procedure b(形参)

  {

    ........

    procedure a(形参)--------------->调用过程a

    ........

  }

 

  5. 基本的递归示例:

      (1). n!

      n! = n *(n -1) *(n-2) * ....*3 *2 *1

      所以可以看成重复的操作,且上一次的输出是下一次的输入。 n!= n*((n-1)!)

     c#递归实现n!的代码:

     

namespace Testn { class Program { static void Main(string[] args) { int n = 0; long res = 0; Console.WriteLine("请输入n的值!"); n = int.Parse(Console.ReadLine()); res = GetJieCheng(n); Console.WriteLine("{0}!= {1}",n,res ); } public static long GetJieCheng(int n) { if (n == 1) { return 1; } else { return n * GetJieCheng(n - 1); } } } }

转载于:https://www.cnblogs.com/shuming/archive/2011/01/20/1940587.html


最新回复(0)