此题类似于模拟一个栈的进栈和出栈问题,具体代码如下:
void printNN(int n,boolean flag,int i){
if(n<5000&&flag){
i++;
printNN(n<<=1,flag,i);
}else {
flag=false;
if(i>0){
i--;
System.out.println(n>>=1);
printNN(n,flag,i);
}
}
}
flag标识进出栈,flag=true表示进栈,flag=false表示出栈;
i用来统计栈中的记录数;
注意:利用移位做乘除法要使用运算符<<=和>>=,而不是<<和>>,因为后者没有将结果赋值给n。
void printNN(int n,boolean flag,int i){
if(n<5000&&flag){
i++;
printNN(n<<=1,flag,i);
}else {
flag=false;
if(i>0){
i--;
System.out.println(n>>=1);
printNN(n,flag,i);
}
}
}
flag标识进出栈,flag=true表示进栈,flag=false表示出栈;
i用来统计栈中的记录数;
注意:利用移位做乘除法要使用运算符<<=和>>=,而不是<<和>>,因为后者没有将结果赋值给n。