public class Help {    public static void main(String[] args) {
        int total=0;
        for(int i=1;i<=30;i++){
            total+=b(i);
        }
        
System.out.println(total);
    }
    static int b(int c){
        if(c==1)return 1;
        return b(c-1)*2;
    }
}以上是代码,就是2^1+2^2+2^3+……+2^30的值(其中“2^X”表示2的多少次方),问有没有办法不用循环只用两次递归达到一样的目的

解决方案 »

  1.   


    public static int value(int n) {
    if (n==1) return 2;
    return 2*value(n-1)+2;
    }
      

  2.   

    不就是等比数列么 直接用等比数列的公式呗Sn=a1(1-q^n)/(1-q) =(a1-an×q)/(1-q) (q≠1)   S∞=a1/(1-q) (n-> ∞)(|q|<1)   (q为公比,n为项数)
      

  3.   

    return 1 * (1 - Math.pow(2, 30)) / (1 - 2);
      

  4.   


    public static long cacl(int n) {
        if (n == 0) {return 1;}
        return cacl(n-1)*2 + 1;
    }System.out.println(cacl(30)); //方法调用
      

  5.   

    cacl(30)
    =2^0+2^1+2^2+2^3+……+2^30
    = 1+2*(2^0+2^1+2^3+...+2^29)
    = 1 + 2*calc(29)
    所以递归公式就是
    cacl(n) = 1+2*cacl(n-1)
      

  6.   


    哭笑不得,你没认真看我的答案吧
    return 2*value(n-1)+2; 就是这个意思