Como no me gusta mucho el pseudocódigo, siempre prefiero el código de a deveras voy a postear la solución final en C (aunque muy posiblemente no sea la mejor). Una de las características en las funciones recursivas, es que muchas veces es necesario pasar un parámetro que sirva como variable auxiliar.
Para el cálculo del mínimo común múltiplo de dos o más números se descompondrán los números en factores primos y se tomarán los factores comunes y no comunes con su mayor exponente.
Por ejemplo, de las factorizaciones de 6936 y 1200,
6936 = 2'3 · 3 · 17'2 (léase dos al cubo por tres por diecisiete al cuadrado)
1200 = 2'4 · 3 · 5'2
podemos inferir que su m.c.m. es 24 · 3 · 52 · 172 = 346 800.
Se necesita una variable auxiliar que nos diga en qué numero vamos, esta claro que puede hacerse muy bien sin usar ninguna función recursiva, pero como en tu caso es a fuerza entonces dejo ambos códigos:
Con recursión:
Código:
#include <stdio.h>
int mcm(int div, int n1, int n2);
int main(){
int n1, n2;
int result;
printf("Valores: \n");
scanf("%d",&n1);
scanf("%d",&n2);
result=mcm(2,n1,n2);
printf("El minimo común múltiplo es: %i \n",result);
return 0;
}
int mcm(int div, int n1, int n2){
int aux=1;
while(n1%div==0 || n2%div==0){
aux*=div;
if(n1%div==0)
n1/=div;
if(n2%div==0)
n2/=div;
}
if(div<=n1||div<=n2)
aux*=mcm(div+1,n1,n2);
return aux;
}
Sin recursión:
Código:
#include <stdio.h>
int main(){
int n1, n2;
int mcm=1;
int a=2;
printf("Valores:");
scanf("%d",&n1);
scanf("%d",&n2);
do{
if(n1%a==0 || n2%a==0){
mcm *=a;
if(n1%a==0)
n1/=a;
if(n2%a==0)
n2/=a;
}
else
a++;
}while(a<=n1||a<=n2);
printf("El minimo comun multiplo es: %i\n",mcm);
return 0;
}
Saludos.
Marcadores