Recursion 递归函数的序列1、3、8、18、38、78

Recursion 递归函数的序列1、3、8、18、38、78,recursion,Recursion,我正试图用Java编写一个递归函数,以数学数字序列(1 3 8 18 38 78)显示n元素 到目前为止,我已经做到了这一点: public static int recfunc(int i) { if(i==1) { return 1; } if(i==2) { return 2+recfunc(i-1); } if(i==3) { return 5+recfunc(i-1); } if(i>3) { return ((2^(i-3))*5)+recfun

我正试图用Java编写一个递归函数,以数学数字序列(1 3 8 18 38 78)显示n元素

到目前为止,我已经做到了这一点:

public static int recfunc(int i) {
    if(i==1) { return 1; }
    if(i==2) { return 2+recfunc(i-1); }
    if(i==3) { return 5+recfunc(i-1); }
    if(i>3) { return ((2^(i-3))*5)+recfunc(3); }
    return 0;
}
要计算n(>3),只需将每个步骤(i>3)中的2^(i-3)相加,然后在最后加上8。所以,对于第六个元素,你必须做这个计算:40+20+10+8=78

上面代码的问题是,它成功地计算了两个n(s)之间的数字的增加,然后对其进行ads 5+2+1(8),但它没有应用前面的所有步骤(20+10)

更新:

我正在取得进展,但它仍然没有做到它应该做的

public static int recfunc(int i, boolean param) {
    if(param==false) {
        if(i==1) { return 1; }
        if(i==2) { return 2+recfunc(i-1, false); }
        if(i==3) { return 5+recfunc(i-1, false); }
        if(i>3) { param = true; }
    }
    if(param==true) {
        if(i==4) {
            return ((2^(i-3))*5)+recfunc(i-1, false); }
        else {
            return ((2^(i-3))*5)+recfunc(i-1, true); }
    }
    return 0;
}

问题在于你的幂函数。^在java中,这并不意味着要提升到一种权力。它的意思是XOR

您可以使用java的Math.pow()


希望这有帮助。

此代码现在可以正常工作。谢谢你的帮助

public static int recfunc(int i, boolean param) {
    if(param==false) {
        if(i==1) { return 1; }
        if(i==2) { return 2+recfunc(i-1, false); }
        if(i==3) { return 5+recfunc(i-1, false); }
        if(i>3) { param = true; }
    }
    if(param==true) {
        if(i==4) {
            return (int)Math.pow(2.0f,(double)(i-3))*5+(int)(recfunc(i-1, false)); }
        else {
            return (int)Math.pow(2.0f,(double)(i-3))*5+(int)(recfunc(i-1, true)); }
    }
    return 0;
}
public static int recfunc(int i, boolean param) {
    if(param==false) {
        if(i==1) { return 1; }
        if(i==2) { return 2+recfunc(i-1, false); }
        if(i==3) { return 5+recfunc(i-1, false); }
        if(i>3) { param = true; }
    }
    if(param==true) {
        if(i==4) {
            return (int)Math.pow(2.0f,(double)(i-3))*5+(int)(recfunc(i-1, false)); }
        else {
            return (int)Math.pow(2.0f,(double)(i-3))*5+(int)(recfunc(i-1, true)); }
    }
    return 0;
}