用于学习递归,我从以下链接扩展递归方法: 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)被调用。需要了解递归函数在这种情况下的工作原理
答案 0 :(得分:3)
a
和b
的值相对于之前的调用是相反的 - 正是因为调用是
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);
...这是你的最终输出显示的内容。
重要的一点是它在当前正在执行的方法中使用a
和b
的值,而不是“最顶层”方法中的值。< / p>