我该如何计算出这种复杂的递归算法?

时间:2009-01-25 18:59:14

标签: java recursion binary

我刚刚开始用Java教授数据结构和算法。到目前为止,我只在生活中学过C ++,所以我对使用java仍然很新。

无论如何我有一个家庭作业问题我有点困惑:

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

现在我不确定如何做到这一点。我已经有一个函数设置,它接受一个整数并将其转换为二进制并将其存储在一个字符串中,但其余的我有点迷失。

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

这是我到目前为止所做的:

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());
  }
}

由于

4 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:5)

第一步:思考!

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

答案 2 :(得分:4)

问题是关于算术,所以将值保留为int而不是转换为字符串。

然后有两个事实(对于非负数):

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

010101的bitCount是010101/2 = 01010加1的bitCount bitCount为010100是bitCount为010100/2 = 01010

冲洗并重复直至完成(诱导)。

只是不要查看Integer.bitCount的源代码。

答案 3 :(得分:1)

首先,将问题减少到最简单的情况......