嗨我在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的值是什么?
答案 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);
等等......研究方法以了解原因。