c #newbie在递归函数中丢失了

时间:2014-01-23 19:15:37

标签: c#

嗨我在c#

中有递归问题

以下是代码:

 static int g(int a)
 {
   if (a > 0) 
     return -2 * g(a - 2) + 2;
   else 
     return -2;
 }

结果是什么:

Console.WriteLine(g(5));

有人可以解释一下,当int没有被声明为int a时,int g的值是什么?

2 个答案:

答案 0 :(得分:0)

  

有人可以解释一下,当不是时,int g的值是多少   声明像int?

我不明白这个问题是什么意思,虽然我会解释你,如果你通过了5,函数会返回什么。

首先让我们声明另一个整数,以便更容易:

static int g(int a)
{
   if (a > 0){
      int result = g(a - 2); 
      return -2 * result + 2;
   }
   else 
     return -2;
}

然后:

Console.WriteLine(g(5)) //-2*(-10)+2 = 22

if 5 > 0
  result = g(3) //-2*(6)+2 = -10
  return -2 * result + 2

if 3 > 0
  result = g(1) //result = -2*(-2)+2 = 6
  return -2 * result + 2

if 1 > 0
  result = g(-1) //result = -2
  return -2 * result + 2

if -1 < 0
  return -2

答案 1 :(得分:-2)

您似乎缺乏对递归的理解。让我们简化递归到“经典”基本案例,这比你的例子简单得多。让我们做一个从1到输入数字的总和:

public int SumAll(int number)
{
    // Base case
    if (number == 1)
    {
        return 1;
    }

    // Recursive call
    return number + SumAll(number - 1);
}

递归总是涉及调用自身内的方法和停止循环的“基本情况”或终止步骤。在上面的例子中,“基本情况”是数字等于1以停止循环。

以上示例将评估如下

return 5 + SumAll(4);

SumAll(4)将评估为:

return 4 + SumAll(3);

到目前为止,我们的最终结果将是:

5 + 4 + Sum(3);

等等......研究方法以了解原因。