Java 递归方法2次幂和到2的第x次幂
我的递归方法有问题,它将返回并在main()中打印2的次幂和到2的第x次幂。X是命令行参数上的整数 所以如果我的命令行参数是:“3” *产出将为:15 它应该像(1+2+4+2^3)一样工作,因为你可以看到2的“3”次幂 所以不管我的数字是多少,这就是2的幂加多少。我设法算出了2^x的幂,但我真的很困惑,在我的计算中要加上2的幂和:o 此外,我不会使用Math.pow(),即使这会更容易(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
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