递归算法 求个函数 2的多少次方

unjing 2009-08-07 02:47:47
求个函数 2的多少次方

例如
8 =2*2*2

如果输入 8
结果是 8

如果输入 7(2*2+2*1+2*0)
结果是
4
2
1
如果输入 16
结果是 16

如果输入 15
结果是 8
4
2
1

如果输入 10
结果是 8
2

要Java的算法
...全文
193 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
哈哈.我怎么没有想起来用位运算?真笨.
  • 打赏
  • 举报
回复
public class Test6 {

public static void main(String[] args) {
put(7, 1);
}

public static void put(int num, int level) {
if(level > num) {
return;
}
put(num, level << 1);
if((num & level) > 0) {
System.out.println(num & level);
}
}
}
FlashDragon 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bigbug9002 的回复:]
Java codeimport java.util.*;publicclass Test4{publicstaticvoid main(String[] args) {
fun(58,2);

}staticvoid fun(int num,int p){if(num<3){
System.out.println(num);return;
¡­
[/Quote]

好算法,不过下面的return语句时无用的,因为永远不会执行。
if(num>p){
fun(num,p*2);
//System.out.println(p);
return ;
}
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
import java.util.*; 

public class Test4{
public static void main(String[] args) {
fun(58,2);

}
static void fun(int num,int p){
if(num<3){
System.out.println(num);
return;
}
if(num>p){
fun(num,p*2);
//System.out.println(p);
return ;
}
if(num==p){
System.out.println(p);
return;
}
if(num<p){
if(num>p/2){
System.out.println(p/2);
fun(num-p/2,p/2);
}else{
fun(num,p/2);
}
}

}

}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧