递归方法的幂次数为2,直到X次幂为2

时间:2014-02-05 04:23:43

标签: java recursion methods command-line return

我遇到了递归方法的问题,它将返回并在main()中打印2的幂的总和,直到2的X次方.X是命令行参数的整数。

所以如果我的命令行参数是:“3”

*输出为:15

它应该像(1 + 2 + 4 + 2 ^ 3)一样工作你可以看到2的“3”能力

所以无论我的数字是多少,都会增加多少2的力量。我设法得到2 ^ x的力量,但我真的很困惑,将2的幂的总和加入到我的计算中:o

另外,我不会使用Math.pow(),即使它更容易x)

我的代码atm:

public static void main(String[] commandlineArguments) {
      if (commandlineArguments.length == 0) {
         System.out.println("Please enter a least one commandline!");
      } 
      else {
         Integer number = new Integer(0); // initialize number
         try {
            number = Integer.parseInt(commandlineArguments[0]);
         } 
         catch (NumberFormatException exception) { // NumberFormatException
            System.out.println(exception + " is not a integer!");
            System.exit(1); // end program
         }

         Integer power = power2(number);
         System.out.println(power);

      }
   }

   public static Integer power2(Integer number){
      if (number == 0) {
         return 1;
      } 
      else {
         return 2 * power2(number - 1);
      }
   }

}

7 个答案:

答案 0 :(得分:3)

哦,为了善良。

return ( 1 << ( number + 1 ) ) - 1;

对于那些喜欢任意精确度的人,

return BigInteger.ONE.shiftLeft( number + 1 ).subtract( BigInteger.ONE ); 

我认为一个封闭的表格可以简单地递归。

答案 1 :(得分:1)

尝试,

public static Integer power2(Integer number){
       return (number==0)?1:2*power2(number - 1);
}
public static Integer method1(Integer number){
    return (number==0)?1:power2(number)+method1(number-1);
}

并致电method1

输出:

method1(3)  ==>  15

答案 2 :(得分:0)

请尝试返回此内容:

int result = power5(number - 1);
return 2 * result + result;

这样,如果输入1,则得到2 ^ 1 + 2 ^ 0,依此类推..

答案 3 :(得分:0)

首先坚持使用int而不是整数,因为原语更快,并且开销更少。

其次,如果你只需要2的幂,我建议使用左移运算符<<,因为它正是你所需要的:

public static int powerOf2Sum(int number) {
  if( number == 0 ) {
     return 1;
  }
  return (1 << number) + powerOf2Sum( number - 1 );
}

注意:请注意整数溢出,因为当功率大于32(int中的位数)时,它将翻转。在这种情况下,你需要一个long,它能够表示高达64次幂的整数。

答案 4 :(得分:0)

试试这个

public static Integer power5(Integer number){
      if (number == 0) {
         return 1;
      } 
      else {
         return 2 * power5(number - 1)+ power5(number - 1);
      }
   }

答案 5 :(得分:0)

我喜欢你的问题,许多其他答案对30或更少的输入都有好处;但我想要更好的东西

private static final BigInteger TWO = BigInteger.ONE
    .add(BigInteger.ONE);

private static BigInteger power2(int n) {
  BigInteger l = BigInteger.ONE;
  for (int i = 0; i < n; i++) {
    l = l.multiply(TWO);
  }
  if (n > 0) {
    return l.add(power2(n - 1));
  }
  return BigInteger.ONE;
}
public static void main(String[] commandlineArguments) {
  int number = 3;
  BigInteger result = power2(number);
  System.out.printf("power2(%d) = %s\n", number, result);
  while (true) {
    BigInteger MAX = new BigInteger(
        String.valueOf(Integer.MAX_VALUE));
    result = power2(number);
    if (result.compareTo(MAX) > 0) {
      System.out.printf("power2(%d) = %s\n", number, result);
      break;
    }
    number++;
  }
  number = 256;
  result = power2(number);
  System.out.printf("power2(%d) = %s\n", number, result);
}

输出

power2(3) = 15
power2(31) = 4294967295
power2(256) = 231584178474632390847141970017375815706539969331281128078915168015826259279871

答案 6 :(得分:-1)

public static void main(String[] commandlineArguments) {
  if (commandlineArguments.length == 0) {
     System.out.println("Please enter a least one commandline!");
  } 
  else {
     Integer number = new Integer(0); // initialize number
     try {
        number = Integer.parseInt(commandlineArguments[0]);
     } 
     catch (NumberFormatException exception) { // NumberFormatException
        System.out.println(exception + " is not a integer!");
        System.exit(1); // end program
     }

     Integer power = power5(number);
     System.out.println(power);

  }
}

public static Integer power5(Integer number){
      Integer sum = 0;
if(number == 0)
{
    return 1;
}
Integer pow = 1;
for(int i = 0; i < a; i++)
{
    pow *= 2;
}
sum = pow + power5(a--);
return sum;
}

}