我有一个问题,更多的是理论方面。我想创建一个递归函数,该函数计算给定自然数的所有(不仅仅是素数)不同的除数。
例如,f(0)= 0(每个Def。),f(3)= 2,f(6)= 4,f(16)= 5等。
理论上,我怎么能这样做?
感谢。
答案 0 :(得分:1)
如果我理解正确,你只想计算它们,而不是收集它们,对吗?
第二个假设是你不想只计算独立的除数(即你要计算" 2"," 3"但不是" 6")。
如果是这种情况,Sean的答案中显示的算法可以大大简化:
divisorList
,只需要一个计数器,编辑:
在考虑了一点之后,这是正确的算法:
在伪代码中:
var Limit = N ;
Count = 2 ;
for (I = 2 ; I < Limit ; I++) {
if (N/I is integer) {
Count = Count + 3 ;
Limit = N / I ;
} ;
} ;
注意:我不知道您正在编程哪种语言,因此您需要验证您的语言是否允许您更改循环的限制。如果没有,您可以包含EXIT-LOOP条件(例如if I >= Limit then exit loop
)。
希望这可以解决您的问题。
答案 1 :(得分:0)
public static ArrayList<int> recursiveDivisors(int num)
{
ArrayList<int> divisorList = new ArrayList<int>();
for (int i = 1; i <= num; i++)
{
if (num % i == 0)
divisorList.add(i)
}
return divisorList;
}
这样的东西? 返回除数数组列表中的所有除数 编辑:不递归