2009-01-25 59 views
1

我刚开始使用Java教授的数据结构和算法。到目前为止,我只在我的生活中学习过C++,所以我仍然非常喜欢使用java。如何解决这个复杂的递归算法?

反正我有一个问题家庭作业我有点憋屈:

编写返回N.用事实的二进制表示的1的数递归方法,这等于数1表示N/2 + 1,如果N是奇数。

现在我不知道该怎么做。我已经设置了一个函数,它接受一个整数并将其转换为二进制,并将其存储在一个字符串中,但其余的我有点失落。

如果我能得到一些指导,那真的会有所帮助。

这是我到目前为止有:

import java.io.*; 
public class Homework1Code { 
    static void prtbinary(String Molly, int size){ 
    if(size <=0){ 
     return; 
    } 
    } 

    public static void main(String[] args) { 
    int i = 38; 
    String binstr = Integer.toBinaryString(i); 
    System.out.println("The Original Decimal Number is: " + binstr); 
    prtbinary(binstr, binstr.length()); 
    } 
} 

感谢

回答

11

这不是解决一个困难的问题。你需要做的就是停止编写代码并首先在纸上解决问题。然后将您的算法转换为代码。

+0

+1“首先解决问题,然后编写代码。” – helpermethod 2011-04-06 19:12:28

1

第一,减少的问题,以最简单的情况下...

+2

好的提示,每当我处理递归函数时,我总是看终止的情况,然后从那里开始向后工作。 – Peter 2009-06-24 20:46:46

4

的问题是关于做算术,所以离开该值作为一个int,而不是convering为字符串。

再就是两个事实(对于非负数):

  • 如果N为奇数则一的数量是相同的在N/2加一个剩余;
  • 如果N是偶数,则1的数量与N/2中的数量相同。

的010101比特计数是010100 010101/2 01010 =加1 比特计数的比特计数是010100/2 01010 =

冲洗的比特计数,并重复直到结束(诱导)。

只是不看Integer.bitCount的来源。

5

第一步:想一想!

编写返回类型为void的递归方法非常困难。