C# 递归 详解

递归  指  方法 调用 它自身。

递归  需要结束  否则会造成无限递归,从而导致栈溢出错误。

伪代码形式展示递归:

M(x)

{

 if    x已达最小,不可继续分解

       返回结果

else

       (1) 采取一些操作使问题变得更小

       (2) 递归调用M来解决最小的问题

       (3) 根据(1)和(2)计算结果

        返回结果

}

不遵守这个模式就可能出错。(如果不能将问题变得更小,或者不能处理所有可能的”最小“情况,就会递归个不停。)

else关键字在递归函数中是可选的,尤其是在基本情况已经明确且递归步骤是默认执行路径的情况下。

递归的应用场景(用于解决那些可以分解为多个相似子问题的问题):

       树和图的遍历:递归自然适合于树结构的深度优先搜索(DFS)和广度优先搜索(BFS)。

      分治算法:如快速排序、归并排序等,它们将问题分解成更小的子问题,递归解决这些子问题。

      动态规划:某些动态规划问题可以通过递归加记忆化搜索来解决。

例子:

using System;

namespace FibonacciExample
{
    class Program
    {
        public int Fibonacci(int n)
        {
            // 基本情况
            if (n == 0)
                return 0;
            if (n == 1)
                return 1;
            
            // 递归步骤
            return Fibonacci(n - 1) + Fibonacci(n - 2);
        }

        static void Main(string[] args)
        {
            Program p = new Program();//创建 Program 类的一个实例对象
            Console.WriteLine("斐波那契数列的第5项是:{0}", p.Fibonacci(5));
            Console.WriteLine("斐波那契数列的第7项是:{0}", p.Fibonacci(7));
            Console.ReadLine();
        }
    }
}

你可能感兴趣的:(算法,数据结构)