C# 采用递归算法计算从键盘输入的两个数的最大公约数和最小公倍数
递归算法就是指一个方法直接或间接地自己调用自己的过程,那么为完成这个计算任务,我们需要定义一个用于求取最大公约数和最小公倍数的方法,并定义一个完成输入、输出以及调用方法的主函数。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace norm_program
{
class Program
{
static void Main(string[] args)
{
double i,j;
Console.Write("请输入第一个正整数:");
i=double.Parse(Console.ReadLine());
is_right(i);
Console.Write("请输入第二个正整数:");
j = double.Parse(Console.ReadLine());
is_right(j);
int k = Math.Max((int)i, (int)j);
Console.WriteLine("{0}和{1}的最大公约数为{2}\n", i, j, divisor((int)i, (int)j, k ));
Console.Write("{0}和{1}的最小公倍数为{2}\n", i, j, multiple((int)i, (int)j, k));
Console.ReadLine();
}
static void is_right(double x)//用以判断输入数据是否为正整数;
{
if (x <= 0 || x - (int)x != 0)
{
Console.Write("输入数据有误,请重新开始!");
Console.ReadLine();
}
}
static int divisor(int i, int j,int k)//定义一个求取最大公约数(divisor)的方法;
{
if (i % k == 0 && j % k== 0)
return k;
else
return divisor(i, j, --k);//输入“k--”程序会陷入死循环;
}
static int multiple(int i, int j,int k)//定义一个求取最小公倍数(multipie)的方法;
{
int x=1;
if (k % i == 0 && k % j == 0)
return k;
else
return multiple(i, j, k*(++x));
}
}
}
在编程过程中,进行递归调用时除了要保证每个出口都有返回值之外(否则会提示“并非所有的代码路径都有返回值!”此类错误),在另一方面,若在调用过程中使用到自增或自减时,一般不采用“i++”或“i–”等此类先用后加(减)语句,否则会提示错误。
程序运行结果如下: