我似乎无法想出这个。我需要计算一个给定数字以下可以分割的数字。
这是我尝试过的:
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);
}
这不起作用,我不知道从哪里开始。谁知道该怎么办?
答案 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
}