(1)
1 #include<stdio.h>
2 int Gcd(int x, int y){
3 int z, max;
4
5 do{
6 printf("please input two numbers\n");
7 scanf("%d%d",&x,&y);
8 z=x>=y?y:x; //确定数输入数字大小,确保从较小的数字开始计算;
9 for (int i = z;i > 0;i--){
10 if (x%i == 0&&y%i == 0){ //通过for循环结构逐个计算;
11 max = i;
12 break;
13 }
14 }
15 }while (x <= 0||y <= 0); //防止数字输入不正确;
16
17 return max;
18 }
19
20 int main()
21 {
22 int num1, num2;
23
24 printf("the greatest common divisor is: %d\n",Gcd(num1, num2));
25
26 return 0;
27
28 }
(2)
1 #include<stdio.h>
2 int Gcd(int x, int y){
3 int z, e, r;
4
5 do{
6 printf("please input two numbers : \n");
7 scanf("%d%d",&x, &y);
8 }while (x <= 0||y <= 0); //先对输入的数字是否正确进行判断;
9
10 z = x>=y?x:y;
11 e = x>=y?y:x; //确定两个数字的大小,保证取余运算时大的数字在前面;
12
13 do{
14 r = z%e;
15 z = e;
16 e = r;
17 }while(e != 0); //当取余结果为0时返回分子代表的数值
18
19 return z;
20
21 }
22
23 int main()
24 {
25 int num1, num2;
26
27 printf("the greatest common devisor is :%d\n",(Gcd(num1, num2)));
28
29
30
31 return 0;
32 }
33
(3)
1 #include <stdio.h>
2 int Gcb(int x, int y){
3 int z,e;
4
5 z =x>=y?x:y; //确定两个数的大小;
6 e =x>=y?y:x;
7
8 if (z != e){
9 Gcb(z-e, e); //按照求最大公约数的性质进行递归求解;
10 }else {
11 return z;
12 }
13 }
14
15 int main()
16 {
17 int num1, num2;
18
19 do{
20 printf("please input two numbers:\n"); //对于输入数字进行判断;
21 scanf("%d%d", &num1, &num2);//此次未写在定义函数中防止每次递归都要重新提示并输入
22
23 }while (num1 <= 0||num2 <= 0);
24
25 printf("the greatest common devisor is :%d\n", (Gcb(num1, num2)));
26
27
28 return 0;
29 }
30
(可以看出递归算法更加侧重于计算的技巧,并且计算机计算的次数也相对更少);