Помогите найти ошибку в программе. Как бы ясно, что НОД должен быть равен 5, а не 10, но не могу найти в чём ошибка
#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;
int NOD(int m, int n)
{
setlocale (LC_ALL,"RUS");
int r;
r=(m%n);
if (r==0)
return n;
else
{NOD(m,r);
return r;}
}
int main()
{
int n=0;
n=NOD(35,25);
printf("Наибольший общий делитель (НОД): %i ",n);
printf(" ");
system("pause");
return 0;
}
может вместо {NOD(m,r); return r;} должно быть return NOD(m,r); ? PS: классический алгоритм long gcd(long a, long b) { if (a == b) return a; if (a > b) { long tmp = a; a = b; b = tmp; } return gcd04(a, b - a); }
смотри в нод передаешь 2 переменные и нигде их не меняешь по ходу этой процедуры. Т. Е. строки {NOD(m,r); return r;} полюбому вернут первый переданный "р" Попробуй что-нить в духе {r = NOD(m,r); return r;} Или {return NOD(m,r);}