Java 特定序列的递归方法
我试图在特定位置(序列从0开始)获取序列的值。这个序列的公式是Java 特定序列的递归方法,java,recursion,sequence,Java,Recursion,Sequence,我试图在特定位置(序列从0开始)获取序列的值。这个序列的公式是f(n)=(2^n)-1,其中f(0)=0 顺序是f(0)=0,f(1)=1,f(2)=3,f(3)=7,f(4)=15,等等 我编写了这个递归函数来查找位置。不过,我的数字有点不对劲。为什么我的数字不正确 对于这个结果,如果我输入数字f(4),我会得到f(5)-31中的值 public static int getNumber(int num) { if(num == 0) { return 1; }
f(n)=(2^n)-1
,其中f(0)=0
顺序是f(0)=0,f(1)=1,f(2)=3,f(3)=7,f(4)=15,等等
我编写了这个递归函数来查找位置。不过,我的数字有点不对劲。为什么我的数字不正确
对于这个结果,如果我输入数字f(4)
,我会得到f(5)-31中的值
public static int getNumber(int num) {
if(num == 0) {
return 1;
} else {
return (int)Math.pow(2,num) + getNumber(num-1);
}
}
我知道问题在我的基本情况之内。如何修复它?您说f(0)=0,但您的代码检查num==0
,如果是,则返回1。如果num==0
,则只需返回0
虽然我也不认为你的递归会按照你想要的方式正确工作。2^n-1可以表示为2小于n的所有幂的和,而你的求和是2小于或等于n的幂的和。因此,您可能应该在学习时学习Math.pow(2,num-1)
。您的说明说f(0)
是0
。而且,您的函数不是再保险的。我想你想要的是2n-1
我试了一下
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.printf("f(%d) = %d%n", i, getNumber(i));
}
}
得到同样的结果。我已经试过了。。。它返回的数字不正确。您是否尝试了这两种建议?你的递归实际上也不会产生你认为你编写的函数。你的第二部分(Math.pow(2,num-1)帮助解决了这个问题。谢谢你!我不明白你认为你在这里编写了什么,但它不是你所描述的f(n)
。这就是我请求帮助的原因
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.printf("f(%d) = %d%n", i, getNumber(i));
}
}
public static int getNumber(int num) {
if (num == 0) {
return 0;
}
return (1 << num) - 1;
}