为了账号安全,请及时绑定邮箱和手机立即绑定

这个算法怎么解!!! 大家帮忙看看!!

这个算法怎么解!!! 大家帮忙看看!!

猛跑小猪 2019-03-21 18:19:50
一个大于0的整数 N , 求 2 * N + 4*N + 8*N + 16*N 以此类推,当X*N 大于 5000的时候输出! 然后从小到大以此输出 2*N 、 4*N 、 8*N 、 16*N X*N .... 不大于5000 输出完之后再倒着从大到小输出 X*n .... 16*N 、8*N 、4*N 、2*N 不能用循环 不能用本地变量!
查看完整描述

5 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

public static void print(int n){

if((n = n << 1) <= 5000) {

System.out.print(n + " ");

print(n);

System.out.print(n + " ");

} else {
System.out.println();
}
}

查看完整回答
反对 回复 2019-04-30
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

既然不能用循环,楼主必须要想到这个其实是考察你递归式的运用

public static int TowPowWithN(int n) {

    int sum = TowPowWithN(n, 2, 0);
    return sum;
}

public static int TowPowWithN(int n, int x, int sum) {
    if (n == 0) {
        return 0;
    }
    int y = n * x;
    System.out.println(y);
    sum += y;
    if (y >= 5000) {
        return sum;
    } else {
        x *= 2;
        return TowPowWithN(n, x, sum);
    }

倒序打印我是没想出来 楼主可以自己想想了


查看完整回答
反对 回复 2019-04-30
?
HUX布斯

TA贡献1876条经验 获得超6个赞

这个..明显考递归的啦!

public class test{

static void test(int n){
n*=2;
if(n<=5000)
{
printf("%d,",n);
test(n);
printf("%d,",n);
}
else
{
printf("\n");
return;
}
}

static void main(int argc,String args[])
{

}

}


查看完整回答
反对 回复 2019-04-30
?
SMILET

TA贡献1796条经验 获得超4个赞

这个主要考察的是递归的理解 因为递归 有个入栈和出栈的过程哈!

public class Test{

static void test(int n){

n*=2;

if(n<=5000)

{

System.out.print(n);

test(n);

System.out.print(n);

}

else

{

System.out.println();

return;

}

}

static void main(String args[])

{

if(args.length<2)
System.out.println("输入n");
else
test(Integer.parseInt(args[1]));

}

}

如果正确,请选为最佳答案 谢谢


查看完整回答
反对 回复 2019-04-30
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

//要求是得到X以後先打印X的結果,再正序打印累加序列的話。需要在計算的時候得用減法,保證遞歸棧的順序正確。
                    int Count(int result, int X, int N, boolean isFirstEnter ){
                        if ( isFirstEnter ){
                            if ( result > 0 ){
                                X++;
                                result -= 2*X*N;
                                Count(result, X, N, isFirstEnter);
                                System.out.println(2*X*N);
                            }

                            else{//最終結果已經得到,d
                                System.out.println(X);
                            }

                            if ( result == 5000 ){//正序打印完畢,開始第二次遞歸,並進行倒序打印
                                Count(result, 1, N, false);
                            }
                        }
                        else{
                            if ( result > 0 ){
                                System.out.println(2*X*N);
                                X++;
                                result -= 2*X*N;
                                Count(result, X, N, isFirstEnter);
                            }
                        }
                    }

                    int invertedOrderPrint(int result, int X, int N){
                        if ( result - 2*X*N > 0 ){
                            X++;
                            result 
                            invertedOrderPrint()
                        }
                    }


查看完整回答
反对 回复 2019-04-30
  • 5 回答
  • 0 关注
  • 464 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信