【问题标题】:switching values in a recursion method在递归方法中切换值
【发布时间】:2018-09-19 08:17:03
【问题描述】:

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

   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 的切换。在递归调用方法(3)之后,当flowerInVase = 1时,不应该分别设置a = 2和b = 1的值,因为递归函数方法(flowerInVase - 1,b,a)被调用。需要了解递归函数在这种情况下是如何工作的

【问题讨论】:

  • 按照你的逻辑,很简单。
  • 第一个 Method(3,1,2) 被调用,然后 Method(2,2,1),然后 Method(1,1,2),然后 Method (0,2,1) .在方法(0,2,1)中,if条件里面的代码不会被执行。之后 Method(1,1,2) 继续执行并将 1, 1, 2 写入控制台。其次是 2,2,1 和 3,1,2。

标签: c# function recursion c#-4.0


【解决方案1】:

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的值,而不是“最顶层”方法中的值。

【讨论】:

  • 本质上是不是意味着在第3次迭代中,b是a,a是b。我的理解正确吗?
  • @NIMISHDESHPANDE:在每次调用中,b 具有 a 在上一次调用中所做的值,反之亦然。
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多