Java 递归方法2次幂和到2的第x次幂

Java 递归方法2次幂和到2的第x次幂,java,recursion,methods,command-line,return,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) 我的自动取款机代码: public static void main(String[] command

我的递归方法有问题,它将返回并在main()中打印2的次幂和到2的第x次幂。X是命令行参数上的整数

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

*产出将为:15

它应该像(1+2+4+2^3)一样工作,因为你可以看到2的“3”次幂

所以不管我的数字是多少,这就是2的幂加多少。我设法算出了2^x的幂,但我真的很困惑,在我的计算中要加上2的幂和:o

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

我的自动取款机代码:

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

}

请尝试返回以下内容:

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

这样,如果您输入1,您将得到2^1+2^0,依此类推。

首先,使用
int
而不是整数作为基本体速度更快,开销更少

其次,如果你只需要2的幂,我建议使用左移位运算符,
试试这个

public static Integer power5(Integer number){
      if (number == 0) {
         return 1;
      } 
      else {
         return 2 * power5(number - 1)+ power5(number - 1);
      }
   }
publicstaticvoidmain(String[]commandlineArguments){
if(commandlineArguments.length==0){
System.out.println(“请输入至少一条命令行!”);
} 
否则{
整数=新整数(0);//初始化整数
试一试{
number=Integer.parseInt(commandlineArguments[0]);
} 
catch(NumberFormatException异常){//NumberFormatException
System.out.println(异常+“不是整数!”);
System.exit(1);//结束程序
}
整数幂=power5(数字);
系统输出打印LN(电源);
}
}
公共静态整数power5(整数){
整数和=0;
如果(数字==0)
{
返回1;
}
整数pow=1;
for(int i=0;i
return ( 1 << ( number + 1 ) ) - 1;

我认为一个封闭的形式可以说是一个简单的递归形式。

我喜欢你的问题,其他许多答案对于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);
}
试试看

并调用
方法1

输出:


提示:您正在计算一个和,但没有使用单个
+
。所以你需要在某个地方添加一个。嗨,aljipa,我想我解释错了我的问题,因为你的代码输出不正确:所以不管我的数字是多少,所以可能是5。它将增加2(1+2+4+8+16)+2^5的5次幂:oIt应该是
1尽管,有没有其他方法不使用左移位运算符?我的坏,回答时有点困,当然应该是1 Hi Simba,作为一个递归,我正在尝试不迭代地循环/for循环:oI在我的问题中添加了一个示例输出,因为我可能会引起混淆:oI抱歉:c!您的代码正确地对这些输出进行采样。虽然我正在使用递归方法,它应该自己调用吗?
return ( 1 << ( number + 1 ) ) - 1;
return BigInteger.ONE.shiftLeft( number + 1 ).subtract( BigInteger.ONE ); 
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
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(3)  ==>  15