Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 4
1

Что вернет функция?

21.12.2012, 01:03. Показов 1044. Ответов 10
Метки нет (Все метки)

Задача была на НОД. Есть разные способы его нахождения, но вот столкнулся с данным кодом и не понимаю как он работает. Насколько я знаю, функция возвращает один аргумент. Что вернет функция в данном случае? Вот кусочек кода. Не понимаю суть реторна. Спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
else if(x % 2 == 0 && y % 2 == 0)
 
      return 2 * nod(x / 2, y / 2);
 
   else if(x % 2 == 0 && y % 2 != 0)
 
      return nod(x / 2, y);
 
   else if(x % 2 != 0 && y % 2 == 0)
 
      return nod(x, y / 2);
 
   else if(x % 2 != 0 && y % 2 != 0)
 
      return nod(y, abs(y - x));
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2012, 01:03
Ответы с готовыми решениями:

Что вернет функция
Что вернет функция, проверяющая баланс скобок, если она принимает как параметр такую строку: ...

Что вернет функция
Здравствуйте! Я вот С не знаю вообще, подскажите пожалуйста выполнится ли while при таком условии ...

Что вернёт функция g(), если её вызвать в C++?
Что вернёт функция g(), если её вызвать в C++? int h(int *q, int *p) { *p += 1; *q...

Что вернет стековая функция разбора пар скобок?
Что вернет функция, проверяющая баланс скобок, если она принимает как параметр такую...

10
572 / 555 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
21.12.2012, 03:21 2
здесь происходит рекурсивный вызов
0
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
21.12.2012, 07:19 3
Цитата Сообщение от Max1111 Посмотреть сообщение
Задача была на НОД. Есть разные способы его нахождения, но вот столкнулся с данным кодом и не понимаю как он работает. Насколько я знаю, функция возвращает один аргумент. Что вернет функция в данном случае? Вот кусочек кода. Не понимаю суть реторна. Спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
else if(x % 2 == 0 && y % 2 == 0)
 
      return 2 * nod(x / 2, y / 2);
 
   else if(x % 2 == 0 && y % 2 != 0)
 
      return nod(x / 2, y);
 
   else if(x % 2 != 0 && y % 2 == 0)
 
      return nod(x, y / 2);
 
   else if(x % 2 != 0 && y % 2 != 0)
 
      return nod(y, abs(y - x));
по данному куску кода не понятно что оно вернет, так как не хватает условия выхода, есть подозрение ,что оно идет первым,а у вас начинается код с исключением

Добавлено через 5 минут
но можно сказать точно что это будет НОД
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 4
21.12.2012, 23:49  [ТС] 4
Благодарю за комментарии.
Мне наверное стоило сразу весь код выложить.

Вот весь код. К примеру Х=3, Y=4. попадаем в этот кусок кода: else if(x % 2 != 0 && y % 2 == 0)
return nod(x, y / 2); Каким образом оно мне вернет единицу? Не понимаю.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <math.h>
 
int nod(int, int);
 
using namespace std;
 
int main()
{
   int int1, int2;
   
   cout << "//Finding of the greatest general divider" << endl << endl;
   cout << "Enter two whole numbers: " << endl;
   cin >> int1 >> int2;
   cout << "NOD: " << nod(int1, int2) << endl;
   
   return 0;
}
 
int nod(int x, int y)
{
   if(x == 0)
      return y;
   else if(y == 0)
      return x;
   else if(x == y)
      return x;
   else if(x == 1 || y == 1)
      return 1;
   else if(x % 2 == 0 && y % 2 == 0)
      return 2 * nod(x / 2, y / 2);
   else if(x % 2 == 0 && y % 2 != 0)
      return nod(x / 2, y);
   else if(x % 2 != 0 && y % 2 == 0)
      return nod(x, y / 2);
   else if(x % 2 != 0 && y % 2 != 0)
      return nod(y, abs(y - x));
}
0
1402 / 644 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
22.12.2012, 00:30 5
Nod (3, 4) ----> Nod (3, 2) --> Nod (3, 1) ---> return 1;
0
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
22.12.2012, 00:30 6
первый раз в жизни сталкиваюсь с таким длинным кодом для НОДа.Он же на 2 строчки...
0
1402 / 644 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
22.12.2012, 00:31 7
ZaMaZaN4iK, это, вроде бы, бинарный поиск нода.

Добавлено через 22 секунды
должен работать за логарифм
0
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 4
22.12.2012, 23:37  [ТС] 8
Цитата Сообщение от Dani Посмотреть сообщение
Nod (3, 4) ----> Nod (3, 2) --> Nod (3, 1) ---> return 1;
А откуда программа знает, где ей остановится? Где остановится скажем на единице, а где на тройке? С рекурсиями я еще не мел дело. Только поверхосно. Как я понимаю это что-то вроде циклов. Только вот условия выхода, я тут не вижу. И как программа будет вести себя вот к примеру в таком случае "
C++
1
return 2 * nod(x / 2, y / 2);
"? Будет вызывать НОД Х или Y?

И если не тяжело скажите, когда идет вызов рекурсии, код повторяется весь что находиться в ней (рекурсии), или же определенный кусок кода, который непосредственно нужен нам?

Спасибо.
0
Форумчанин
Эксперт CЭксперт С++
8169 / 5017 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
22.12.2012, 23:40 9
Цитата Сообщение от Max1111 Посмотреть сообщение
А откуда программа знает, где ей остановится?
отсюда
C++
1
2
3
4
5
6
7
8
9
10
int nod(int x, int y)
{
   if(x == 0)
      return y;
   else if(y == 0)
      return x;
   else if(x == y)
      return x;
   else if(x == 1 || y == 1)
      return 1;
1
1402 / 644 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
22.12.2012, 23:45 10
Цитата Сообщение от Max1111 Посмотреть сообщение
где ей остановится?
она будет останавливаться (в этом случае) на условии
C++
1
2
else if(x == 1 || y == 1)
      return 1;
1
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 4
22.12.2012, 23:49  [ТС] 11
Цитата Сообщение от MrGluck Посмотреть сообщение
отсюда

Цитата Сообщение от Dani Посмотреть сообщение
она будет останавливаться (в этом случае) на условии
C++
1
2
else if(x == 1 || y == 1)
      return 1;

Блин, как все просто оказывается. Огромное Вам спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2012, 23:49

Что вернет стековая функция разбора пар скобок?
Что вернет функция, если она принимает как параметр такую строку: (5*(x/(y*5))*z)+((1/7)*z*2)-x ...

Какое значение вернет функция system, если задана неверная команда
Подскажите какое значение вернет функция system, если задана неверная команда, например открытие...

Функция, которая вернет номера двух из трех заданных точек на плоскости, расстояние между которыми минимально
Написать функцию Otr(x1,y1,x2,y2,х3,у3) вещественного типа, которая вернет номера двух из трех...

CLisp Что вернет функция?
Дана функция (defun test (a b &amp;optional (c 1 c-p) (d 2 d-p)) (+ a (if c-p d b) c d)) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.