递归求公约数那里错了 高手指教

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:57:38
#include "stdafx.h"
#include "stdio.h"
int fun_1(int m,int n)
{
while(m!=n)
{
while(m>n)
m-=n;
while(n>m)
n-=m;
}
return(m);
}
void main()
{int m,n,p;
scanf("m=%d n=%d\n",&m,&n);
p=fun_1(m,n);
printf("%d",p);
}

首先,算法本身就不对,这就不是求公约数的方法啊。
其次,这就不是递归。
最后,scanf用法也有误。

这有一个不是递归的,我刚调试过,没问题:
#include "stdio.h"
#include <conio.h>
int fun_1(int m,int n,int* p,int* num){
int i, tmp = m>n?n:m;
if((1 == m)||(1 == n))return 0;
if((m < 1)||(n < 1))return -1;
for(i = 2; i <= tmp; i ++){
if((!(m%i))&&(!(n%i))){
p[(*num)] = i;
(*num) ++;
}
}
return (*num);
}
int main(){
int i,m,n,p[100],num=0, tmp;
printf("m=");
scanf("%d",&m);
printf("\n");
printf("n=");
scanf("%d",&n);
tmp = fun_1(m,n,p,&num);
if(tmp < 0){
printf("Error input!\n");
return 0;
}
printf("There are %d common divisor.\n",num);
if(num){
printf("They are:");
for(i = 0; i < num; i++){
printf("%d ",p[i]);