在递归方法中切换值

时间:2018-04-09 20:34:33

标签: c# function recursion c#-4.0

用于学习递归,我从以下链接扩展递归方法: how recursion works followoing是我的代码:

   class Program
    {
        static void Main(string[] args)
        {

            Method(3,1,2);
            Console.ReadLine();

        }

        public static void Method(int flowerInVase, int a, int b)
        {
            if (flowerInVase > 0)
            {
                Method(flowerInVase - 1,b,a);
                Console.WriteLine(+flowerInVase+", "+a+" ,"+b);

            }

        }

以下是输出:

1, 1 ,2
2, 2 ,1
3, 1 ,2

我理解堆栈概念,但不理解第3次迭代中值a和b的切换。在递归调用方法(3)之后,当flowerInVase = 1时,不应该分别使用a = 2和b = 1的值,因为递归函数方法(flowerInVase - 1,b,a)被调用。需要了解递归函数在这种情况下的工作原理

1 个答案:

答案 0 :(得分:3)

ab的值相对于之前的调用是相反的 - 正是因为调用是

Method(flowerInVase - 1, b, a);

您可以从输出中看到,当flowerInVase为2时,a的值为2,b的值为1.这就是此行的含义:

2, 2 ,1

所以看着它,我们有:

Method(flowerInVase -1, b, a);
// flowerInVase is 2
// b is 1
// a is 2

因此,最终通话相当于:

Method(1, 1, 2);

...这是你的最终输出显示的内容。

重要的一点是它在当前正在执行的方法中使用ab的值,而不是“最顶层”方法中的值。< / p>