Java 相互递归函数
我试图理解为什么下面的函数对于我给它们的任何输入都输出零。我本以为,基于递归性质,将2输入到函数g,将产生12。任何一个我似乎用于任一函数的整数都只输出0。有人能指出我在思考过程中哪里出错了吗Java 相互递归函数,java,mutual-recursion,Java,Mutual Recursion,我试图理解为什么下面的函数对于我给它们的任何输入都输出零。我本以为,基于递归性质,将2输入到函数g,将产生12。任何一个我似乎用于任一函数的整数都只输出0。有人能指出我在思考过程中哪里出错了吗 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
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。这是基本情况,较高的情况只会将这些零相加。你在哪里看到另一个值进入方程?
- 如果任一函数的参数为零,则返回0
- 如果它有任何其他值,则返回两个递归调用的总和
- 两个零的和等于零
您希望函数在什么地方产生除零以外的任何结果?您的问题不在于重复,而在于变量的初始化 我认为您试图通过以下公式计算一些关联系数:
- g(n)=g(n-1)+i(n)
- i(n)=i(n-1)+g(n-1)
- g(0)=0
- i(0)=0
- g(0)=1
- i(0)=1
这最终更像是一个数学问题。为了简单起见,您可以将其简化为一个函数,因为相互递归是不相关的:
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;
}