我试图理解为什么下面的函数为我给它们的任何输入输出零。我会认为基于输入2到函数g的递归性质,会产生12.我似乎用于任何一个函数的任何整数只输出0.任何人都可以指出我在思考过程中出错的地方吗? / p>
public class dsdsfsd {
public static int i(int n) {
if (n == 0) return 0;
return i(n-1) + g(n-1);
}
public static int g(int n) {
if (n == 0) return 0;
return g(n-1) + i(n);
}
public static void main(String[] args) {
int a = 2;
System.out.println(g(a));
System.out.println(i(a));
System.out.println(g(g(a)));
}
}
答案 0 :(得分:3)
不确定。这些函数可以返回的唯一值是0.这是基本情况,较高的情况除了加上那些零之外什么都不做。你在哪里看到另一个值进入等式?
答案 1 :(得分:2)
您希望函数在哪里产生但零?
答案 2 :(得分:0)
您的问题不在于重复发生,而在于变量的初始化。
我认为你试图用公式计算一些链接系数:
然而,当你将g和i初始化为0时,i(1)= g(0)+ i(0)= 0 + 0 = 0,并且g(n)或i(n)的任何值都将是0的原因相同:你继续加0和0。
相反,如果您希望获得非空结果,则应至少更改一个初始化,例如:
那样,你有i(1)= g(0)+ i(0)= 1 + 1 = 2而g(1)= g(0)+ i(1)= 1 + 2 = 3。
这最终是一个数学问题。
答案 3 :(得分:0)
为简单起见,您可以将其简化为单个函数,因为相互递归无关紧要:
public static int func(int n) {
if (n == 0) return 0;
return func(n-1);
}
请注意,返回的方法只有两种:
想一想。在某些时候,它必须停止递归(否则它将永远运行)。当返回0的基本情况时会发生什么?你的功能变成了这样的东西(当然只是想象的目的):
public static int func(int n) {
if (n == 0) return 0;
return 0;
}
因此,0是您的函数能够返回的唯一值,因为它是唯一返回的具体值。