Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Max1111
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 4
#1

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

21.12.2012, 01:03. Просмотров 529. Ответов 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));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2012, 01:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что вернет функция? (C++):

Что вернет функция - C++
Что вернет функция, проверяющая баланс скобок, если она принимает как параметр такую строку: ((х+y/z+у+(z/(y+z))-((0*z)-3) ...

Что вернет стековая функция разбора пар скобок? - C++
Что вернет функция, проверяющая баланс скобок, если она принимает как параметр такую строку: ((х-((1/х)+у-4)*(z/4+(2-x*3)) Рассмотреть...

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

Какое значение вернет функция system, если задана неверная команда - C++
Подскажите какое значение вернет функция system, если задана неверная команда, например открытие несуществующего или защищенного каталога?

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

что за функция такая strstr? или это не функция? - C++
void search(sp *list){ sp *prt = list; char f,r; cout<<Rus("введите текст")<<endl; cin>>f; cout<<Rus("введите выходной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.12.2012, 03:21 #2
здесь происходит рекурсивный вызов
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 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 минут
но можно сказать точно что это будет НОД
Max1111
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));
}
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
22.12.2012, 00:30 #5
Nod (3, 4) ----> Nod (3, 2) --> Nod (3, 1) ---> return 1;
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
22.12.2012, 00:30 #6
первый раз в жизни сталкиваюсь с таким длинным кодом для НОДа.Он же на 2 строчки...
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
22.12.2012, 00:31 #7
ZaMaZaN4iK, это, вроде бы, бинарный поиск нода.

Добавлено через 22 секунды
должен работать за логарифм
Max1111
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?

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

Спасибо.
MrGluck
Модератор
Эксперт CЭксперт С++
7209 / 4375 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
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;
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
22.12.2012, 23:45 #10
Цитата Сообщение от Max1111 Посмотреть сообщение
где ей остановится?
она будет останавливаться (в этом случае) на условии
C++
1
2
else if(x == 1 || y == 1)
      return 1;
Max1111
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;

Блин, как все просто оказывается. Огромное Вам спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2012, 23:49
Привет! Вот еще темы с ответами:

Какое число вернет foo(5)? - C++
int foo (int n) { if (n &lt;= 0) return 0; return foo (n - 2) + foo (n / 2) + 1; } Вставляю код, выполняю с нужным...

Задачка: какое значение вернет foo(7)? - C++
Как решаются такие рода задачки, подскажите пожалуйста. int foo(int n) { if(n&lt;=0) return 1; else return...

Какое значение вернет программа операционной системе? - C++
Допустим, в программе присутствует следующий код: int fn(int a) { return a++; } void main() { int x = fn(7); return x; } ...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? - C++
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i &lt; 8;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.12.2012, 23:49
Ответ Создать тему
Опции темы

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