给定一个数字,找到它下面的数字除以使用递归

时间:2013-10-04 23:22:06

标签: java recursion

我似乎无法想出这个。我需要计算一个给定数字以下可以分割的数字。

这是我尝试过的:

public int testing(int x) {
    if (x == 0) {
        System.out.println("zero");
        return x;
    }
    else if ((x % (x-1)) == 0) {
        System.out.println("does this work?");
        x--;
    }

    return testing(x-1);
}

这不起作用,我不知道从哪里开始。谁知道该怎么办?

6 个答案:

答案 0 :(得分:2)

这是错误的:

 public int testing(int x) {

如果要使其递归,则需要传递要测试的数字和当前正在检查的数字。第一个不会通过递归而改变,第二个将递减。只能使用一个参数来表达你所表达的内容(除非你使用全局变量)。

答案 1 :(得分:2)

这不是一个应该通过递归来解决的任务。

如果必须使用递归,最简单的方法是使用第二个参数,这实际上是“我已经检查过这个数字”。然后你可以增加/减少这个(取决于你是从0开始还是从初始数字开始)并在那里调用递归。

事实上,Java并不是一种功能性语言,所以做这一切实际上是愚蠢的,所以无论谁给你这个练习,都可能需要一个大便器。

答案 2 :(得分:0)

您的问题是您的表达式x % (x - 1)正在使用x的“当前”值,该值会在每次调用递归函数时递减。你的情况一直都是假的2 % (2 - 1)

使用for循环是处理此任务的更好方法(并查看Eratosthenes的Sieve),但是如果你真的必须使用递归(用于家庭作业),你需要传入原始值以及正在尝试的当前值。

答案 3 :(得分:0)

您的算法存在问题。请注意,递归仅在x == 0时结束,这意味着您的函数将始终返回0(如果它完全返回)。

此外,您的算法似乎没有任何意义。你基本上试图找到一个数字的所有因子,但只有一个参数,x。

尝试为变量创建有意义的名称,逻辑将更易于阅读/遵循。

public int countFactors(int number, int factorToTest, int numFactors)
{
  if (factorToTest == 0) // now you are done
    return numFactors;
  else
    // check if factorToTest is a factor of number
    // adjust the values appropriately and recurse
}

答案 4 :(得分:0)

这里不需要使用递归。这是一个非递归的解决方案:

public int testing(int n) {
    int count = 0;
    for (int i = 1; i < n; i++)
        if (n % i == 0)
            count++;
    return count;
}
顺便说一句,你应该把这个叫做testing以外的其他东西。

答案 5 :(得分:0)

使用递归:

private static int getFactorCount(int num) {
    return getFactorCount(num, num - 1);
}

private static int getFactorCount(int num, int factor) {
    return factor == 0 ? 0 : (num % factor == 0 ? 1 : 0)
            + getFactorCount(num, factor - 1);
}   

public static void main(String[] args) {
    System.out.println(getFactorCount(20)); // gives 5
    System.out.println(getFactorCount(30)); // gives 7
}