Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NOD, NOD 
:(
    Опции темы
danilkramatorsk
Дата 27.2.2013, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



вот 
Код

int nod ( int a, int b )
{
    if ( b == 0 )
       return a;
    else 
         return nod ( b, a % b);  // как работает ?    
}



возвращает ф-ию nod с параметрами первый b второе ( a % b ) , а в ответе выходит 1 параметр ( a % b ). Как это работает?
PM MAIL   Вверх
baldina
Дата 27.2.2013, 17:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(danilkramatorsk @  27.2.2013,  16:51 Найти цитируемый пост)
возвращает ф-ию nod с параметрами

нет. вызывает функцию nod () и возвращает результат её работы. получается рекурсивный вызов (когда функция вызывает саму себя).

т.е. 
Цитата(danilkramatorsk @  27.2.2013,  16:51 Найти цитируемый пост)
  return nod ( b, a % b);  // как работает ?  

эквивалентно
Код

int x = nod ( b, a % b);
return x;


так что nod() последовательно вызывает саму себя (полезно посмотреть в отладке стек вызовов, чтобы лучше понимать что происходит). поскольку в процессе вызова значения аргументов уменьшаются, наступает момент, когда остаток от деления, т.е. a % b станет равным нулю. тогда сработает условие, и функция вернет а (равное значению НОД) в вызвавшую её функцию, та опять вернет и т.д. до самого первого вызова.

Это сообщение отредактировал(а) baldina - 27.2.2013, 17:22
PM MAIL   Вверх
danilkramatorsk
Дата 27.2.2013, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



baldina, ага, понял как выполняется, но все  равно не пойму зачем нам 
Код

nod ( b, a % b);


b перед  a % b?
выводится значение рекурсии a % b..

Это сообщение отредактировал(а) danilkramatorsk - 27.2.2013, 18:19
PM MAIL   Вверх
baldina
Дата 27.2.2013, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



у nod() два параметра. в вызове nod (b, a % b); первый параметр - значение b, второй - a % b
см. http://e-maxx.ru/algo/euclid_algorithm
PM MAIL   Вверх
danilkramatorsk
Дата 27.2.2013, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



baldina, 
Цитата

первый параметр - значение b

я это понял, но почему при выводе ответа он не выводится, а выводится только а%b?
PM MAIL   Вверх
baldina
Дата 27.2.2013, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



теперь не понял я, куда он не выводится.
PM MAIL   Вверх
danilkramatorsk
Дата 28.2.2013, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



baldina, ну вот смотри, 
Код

nod ( b, a % b);


вот у нас 1 параметр = b , а второй a % b
в ответ выводится только a % b. Вопрос, куда делся 1 параметр = b?
PM MAIL   Вверх
xvr
Дата 28.2.2013, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(danilkramatorsk @  28.2.2013,  00:21 Найти цитируемый пост)
Вопрос, куда делся 1 параметр = b? 

Никуда не делся. Он торждественно равен нулю (см строку 3), зачем его куда то выводить?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.