【问题标题】:How do I go about figuring out this complicated recursion algorithm?我该如何弄清楚这个复杂的递归算法?
【发布时间】:2010-10-03 10:40:58
【问题描述】:

我刚开始学习用 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());
  }
}

谢谢

【问题讨论】:

    标签: java recursion binary


    【解决方案1】:

    第一步:思考!

    很难编写返回类型为 void 的递归方法。

    【讨论】:

      【解决方案2】:

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

      那么有两个事实(对于非负数):

      • 如果 N 为奇数,则个数等于 N/2 加一个余数;
      • 如果 N 为偶数,则个数与 N/2 中的相同。

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

      冲洗并重复直到完成(感应)。

      只是不要看 Integer.bitCount 的来源。

      【讨论】:

        【解决方案3】:

        首先,将问题简化为最简单的情况...

        【讨论】:

        • 好的提示,每当我处理递归函数时,我总是查看终止的情况,然后从那里向后工作。
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-03
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          • 1970-01-01
          • 2015-10-09
          相关资源
          最近更新 更多