Java 特定序列的递归方法

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; }

我试图在特定位置(序列从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;
    } 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;
}