Java中的递归函数

时间:2018-02-27 17:28:14

标签: java recursion

我不知道出了什么问题,请指教。

写一个递归函数int ones(int x), 返回x的二进制表示中的1的数量。使函数的工作独立于int的大小(16,32,64位)。

import java.util.Scanner;

public class Recursion1 {

    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter the desired binary number: ");
        int input = sc.nextInt();
        int ones(int x) {
            int count = 0;
            while(x!=0) {
                if(x==1)
                    count++;
                System.out.println("Number of ones is : "+ count);
            }
        }
    }
}

4 个答案:

答案 0 :(得分:0)

ones方法必须在main之外。然后它必须调用自身(根据定义,递归函数调用自身)。

它接收String(文本),然后检查第一个字符是否为1.然后它将此值加到ones(rest of the string),其中“其余字符串”是所有字符但是首先。最后,你递归计算所有这些。

public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    System.out.println("Please enter the desired binary number: ");
    String input = sc.next();

    System.out.println("Number of ones is: " + ones(input));
}

static int ones(String x) {
    // check if first character is 1 or zero
    char c = x.charAt(0);
    int count = c == '1' ? 1 : 0;

    // if it's the only character, return the resulst
    if (x.length() == 1) {
        return count;
    }

    // if there are more characters, call ones(rest of the string)
    return count + ones(x.substring(1));
}

答案 1 :(得分:0)

您的问题陈述中存在不一致,您的函数<div class='parent'> <h1 class='start'>START</h1> <h2 class='in-between'> THIS TEXT IS SUPPOSED TO GET `OVERFLOW` WHEN `.FINISH` REACHES THE POINT OF LEAVING THE `.PARENT` FREESPACE FREESPACE FREESPACE FREESPACE FREESPACE FREESPACE </h2> <h1 class='finish'>FINISH</h1> </div>无法使用&#34;独立于int(16,32,64位)&#34;的大小。 java int ones(int x)是32位,因此要处理大于此值的int,您需要使用String或BigInteger。我在下面为BigInteger提供了一个案例。同样在你的问题陈述中,你要接受一个整数,而不是一个整数的二进制表示,你的函数是取这个整数而不是二进制表示。

int

答案 2 :(得分:0)

其他人指出了你的错误,并提出了一些想法。我只是想通过位操作给出另一个解决方案。

public class MyClass {

    public static int ones(int x) {
        if (x <= 1) return x;

        return x % 2 + ones(x >> 1);
    }

    public static void main(String args[]) {
        int x = 63;

        System.out.println("Ones in " + x + " : " + ones(x));
    }
}

打印出6

答案 3 :(得分:-1)

对于递归,您需要自己调用相同的函数,直到达到某个条件。一个流行的递归示例如下:

public static long factorial(int n) { 
    if (n == 1) {
        return 1; 
    }
    return n * factorial(n-1); 
}

请注意此功能factorial( int n)n减少到1之前如何调用自身。