#c #recursion
#c #рекурсия
Вопрос:
Я создал функцию для вычисления HCF числа с использованием рекурсии. Проблема, с которой я сталкиваюсь, заключается в том, что в выражении (p% q), как p = 8, так и q = 12. Мой компилятор просто создает p = 12 в цикле рекурсии, хотя выражение (8% 12) = 8.
Итак, рекурсивный цикл «hcf(q, p%q)» должен иметь вид (8,8) во втором вызове функции, но, похоже, это (12,8). Я совершенно не в состоянии понять, как это происходит. По моей логике hcf, возвращаемый функцией, должен был быть равен 8, если я указываю 8 как p (первое число).
Примечание: Моей IDE является Visual studio.
int hcf(int p , int q )
{
cout << endl << p << endl << q << endl; // To check what's happening with remainder function in each recursive cycle.
if (p%q != 0)
{
hcf(q, p%q);
}
else
return q;
}
int main()
{
int f, s;
cout << "Enter first numbern";
cin >> f;
cout << "Enter second numbern";
cin >> s;
cout << "The HCF of the numbers is: t" << hcf(f , s) << endl;
}
Ответ №1:
Проблема 1: ваше понимание неверно, программа генерирует правильный вывод.
hcf(p = 8, q = 12)
hcf(12(q), 8 % 12(p % q)) = hcf(p = 12, q = 8)
hcf(8(q), 12 % 8(p % q)) = hcf(p = 8, q = 4)
return 4 (q)
в выражении (p% q), как p = 8, и q = 12. Мой компилятор просто создает p = 12
Потому что вы явно передаете второй аргумент q
в качестве первого аргумента в рекрутинговом вызове.
Проблема 2: вы должны заменить hcf(q, p%q);
на return hcf(q, p%q);
Комментарии:
1. hcf(q, p% q); должно быть hcf (p, p% q); Это правильный способ вычисления HCF.
2. Хорошо, я только что понял свою ошибку.
3. @LiuYubo На самом деле аргументами должны быть
large % small
иsmall
. Порядок не имеет значения.4. Кроме того, почему это должно возвращать hcf(q, p% q) вместо hcf(q, p%q)?
5. @MMH Потому что
int hcf(int p , int q )
возвращаетint
. Ноif
путь просто вычисляет результат, но ничего не возвращает. Таким образом, результат не определен.