我遇到了递归方法的问题,它将返回并在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);
}
}
}
答案 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;
}
}