C# 递归执行顺序

为了方便进一步理解递归,写了一个数字输出

class Program
{
    static void Main(string[] args)
    {
        int number = 5;
        RecursiveDecrease(number);
    }

    static void RecursiveDecrease(int n)
    {
        if (n > 0)
        {
            Console.WriteLine("Before recursive call do : " + n);
			RecursiveDecrease(n - 1);
			Console.WriteLine("After recursive call  do : " + n);
		}
	}
}

输出结果:

Before recursive call do : 5
Before recursive call do : 4
Before recursive call do : 3
Before recursive call do : 2
Before recursive call do : 1
After recursive call  do : 1
After recursive call  do : 2
After recursive call  do : 3
After recursive call  do : 4
After recursive call  do : 5

class Program
{
	static void Main(string[] args)
	{
		int number = 5;
		int[] ages ={1, 2, 3};
         RecursiveDecrease(number,ages);
    }



	static void RecursiveDecrease(int n,int[] age)
    {
        if (n > 0)
        {
            Console.WriteLine("Before recursive call do : " + n+ " array: "+string.Join(",",age));
			RecursiveDecrease(n - 1,age);
			Console.WriteLine("After recursive call one  do : " + n+ " array: "+string.Join(",",age));
			n=n+19;
			for (int i = 0; i < age.Length; i++)
			{
				age[i]=age[i]+10;
			}
			Console.WriteLine("After recursive call  two do : " + n+ " array: "+string.Join(",",age));
		}
	}
}

输出结果:

Before recursive call do : 5 array: 1,2,3
Before recursive call do : 4 array: 1,2,3
Before recursive call do : 3 array: 1,2,3
Before recursive call do : 2 array: 1,2,3
Before recursive call do : 1 array: 1,2,3
After recursive call one  do : 1 array: 1,2,3
After recursive call  two do : 20 array: 11,12,13
After recursive call one  do : 2 array: 11,12,13
After recursive call  two do : 21 array: 21,22,23
After recursive call one  do : 3 array: 21,22,23
After recursive call  two do : 22 array: 31,32,33
After recursive call one  do : 4 array: 31,32,33
After recursive call  two do : 23 array: 41,42,43
After recursive call one  do : 5 array: 41,42,43
After recursive call  two do : 24 array: 51,52,53

具体使用方法如下:

  • 定义一个递归函数,入参数和返回类型。
  • 在函数体内,编写递归停止条件和递归调用的语句。
  • 在递归调用前后,可以编写其他需要执行的代码

总结:

    递归的执行顺序是先进后出的,每次递归调用都会暂停当前的执行,进入到新的函数调用中执行,直到满足退出条件时递归结束,然后返回到上一层递归调用,继续执行后续的代码。

  1. 先进后出的场景使用包括但不限于:
  • 栈数据结构:递归函数的调用栈是一种典型的先进后出的结构,可以利用栈的特性实现一些需要后进先出的操作。
  • 深度优先搜索(DFS):在树或图的遍历过程中,可以使用递归实现深度优先搜索,先探索当前节点的子节点,再回溯到父节点的其他未探索子节点。
  • 解决复杂问题:递归可以将复杂问题分解成简单的子问题,并通过先解决子问题再合并的方式得到最终解。例如,递归可以用于计算斐波那契数列、阶乘、二叉树的高度等。
  • 反转操作:递归可以实现字符串、列表、数组等的反转操作,先处理最后一个元素,再处理前面的元素,从而实现先进后出的效果。

相关推荐

  1. C# 执行顺序

    2024-02-01 23:28:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-01 23:28:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-01 23:28:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-01 23:28:02       87 阅读
  4. Python语言-面向对象

    2024-02-01 23:28:02       96 阅读

热门阅读

  1. C#面:sealed修饰符有什么特点

    2024-02-01 23:28:02       54 阅读
  2. mybatis一对多查询,list中的泛型是包装类

    2024-02-01 23:28:02       50 阅读
  3. DynamoDB 的 LSI 和 GSI 有什么区别?

    2024-02-01 23:28:02       53 阅读
  4. Linux

    Linux

    2024-02-01 23:28:02      49 阅读
  5. 每日OJ题_算法_前缀和⑦_力扣525. 连续数组

    2024-02-01 23:28:02       75 阅读
  6. c++ sort解释

    2024-02-01 23:28:02       44 阅读
  7. MySQL造数方法

    2024-02-01 23:28:02       59 阅读
  8. pgsql中in 和 join 怎么选

    2024-02-01 23:28:02       45 阅读
  9. Android C++生成complier_command.json

    2024-02-01 23:28:02       65 阅读
  10. 2024 React 面试问答

    2024-02-01 23:28:02       43 阅读