请教用递归算法求N个正整数的最小公倍数的算法?

2024-11-23 23:47:45
推荐回答(3个)
回答1:

配了半个多钟头,终于有结果了,但不敢保证效率,也许有更好的方法.以下代码经过测试,有两个地方用到递归,不知道数组的重新构造有不有更好的办法.调用的函数我就不写了.
//求最小公倍数
private int getNum(Int32[] num)
{
if (num.Count() > 1)
{
int int1 = num[0];
Int32[] num1=new Int32[num.Length-1];
for (int i = 1; i < num.Length; i++)
{
num1 [i-1] = num[i];
}
num1[0] = int1 * num1[0] / LCM(int1, num1[0]);
return getNum(num1);
}
else
{
return num[0];
}
}
//最大公约数
private int LCM(int m, int n)
{
if (m % n == 0 || n % m == 0)
{
if (m < n)
{
return m;
}
else
{
return n;
}
}
else
{
if (m < n)
{
return LCM(m, n % m);
}
else
{
return LCM(m % n, n);
}
}
}

回答2:

class Program
{

static void Main(string[] args)
{
int m = 12;
int n = 20;
Console.WriteLine("最大公约数:{0}", LCM(m, n));
//两个正整数的最小公倍数=两个数的乘积÷两个数的最大公约数
Console.WriteLine("最小公倍数:{0}", m*n/LCM(m, n));
}
static int LCM(int m, int n)
{
if (m % n == 0 || n%m==0)
{
if (m < n)
{
return m;
}
else
{
return n;
}
}
else
{
if (m < n)
{
return LCM(m, n % m);
}
else
{
return LCM(m % n, n);
}
}
}
}

回答3:

static void Main(string[] args)
{
int m = 12;
int n = 20;
Console.WriteLine("最大公约数:{0}", LCM(m, n));
//两个正整数的最小公倍数=两个数的乘积÷两个数的最大公约数
Console.WriteLine("最小公倍数:{0}", m*n/LCM(m, n));
}
static int LCM(int m, int n)
{
if (m % n == 0 || n%m==0)
{
if (m < n)
{
return m;
}
else
{
return n;
}
}
else
{
if (m < n)
{
return LCM(m, n % m);
}
else
{
return LCM(m % n, n);
}
}
}