猿问

递归方法中的切换值

为了学习递归,我从以下链接扩展了递归方法: 递归的工作方式 是我的代码:


   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

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


小怪兽爱吃肉
浏览 139回答 1
1回答

慕姐4208626

的值a和b反转关于以前的呼唤-正是因为呼叫Method(flowerInVase - 1, b, a);您可以从输出中看到,当flowerInVase为2时,值为a2,而值为b1。这是此行的含义:2, 2 ,1因此,看看它,我们有:Method(flowerInVase -1, b, a);// flowerInVase is 2// b is 1// a is 2因此,最终通话等效于:Method(1, 1, 2);...这就是您的最终输出显示的内容。重要的一点是它使用的是当前执行方法中a和的值,而不是“最顶层”方法中的值。b
随时随地看视频慕课网APP
我要回答