Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2010, 01:52   #1
whtfng
 
Регистрация: 23.05.2010
Сообщений: 4
По умолчанию взятие остатка по модулю

есть небольшая программка, выполняющая взятие остатка по модулю

#include "stream.h"
int mod (int a, int b) {
return b == 0 ? a : mod (b, a % b);
}

int main() {
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", mod (a, b));
return 0;
}

как понять, сколько раз будет вызвана функция mod???
whtfng вне форума Ответить с цитированием
Старый 30.05.2010, 07:09   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

Вставить статический счетчик, прикинуть по алгоритму руками.
p51x вне форума Ответить с цитированием
Старый 30.05.2010, 17:18   #3
whtfng
 
Регистрация: 23.05.2010
Сообщений: 4
По умолчанию

а что значит "прикинуть руками"? как раз и хотелось бы понять на живом примере как работает алгоритм, по идее тут рекурсия пока b не равно нулю.

ps: а счетчик прикрутил, как-то так:

#include <stdio.h>
int mod (int a, int b, int n) {
n++;
if (b == 0)
{
printf ("mod counts %i times(à)\n", n);
return a;
}
else
return mod(b, a%b, n);
}

int main() {
int a, b;

scanf("%d%d", &a, &b);
printf("%d\n", mod (a, b, 0));

getchar();
getchar();

return 0;
}
whtfng вне форума Ответить с цитированием
Старый 30.05.2010, 17:22   #4
whtfng
 
Регистрация: 23.05.2010
Сообщений: 4
По умолчанию

только все равно не понятно по какому принципу вызывается mod?
пусть a=7, b=2, счетчик выдает mod counts 3 times.
whtfng вне форума Ответить с цитированием
Старый 30.05.2010, 17:32   #5
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Код:
#include <iostream>

int mod (int a, int b, int &count) {
	count++;
	std::cout << count << " ";
	return b == 0 ? a : mod (b, a % b, count);
}

int main() {
	int a, b, n = 0;
	scanf("%d%d", &a, &b);
	printf("%d\n", mod (a, b, n));
	std::cout << n;
	return 0;
}
вся программа... посмотри в дебаггере как работает рекурсия, поймешь почему оно столько раз входит.
Tirendus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление многочленов. Нахождение остатка @Manya@ Общие вопросы C/C++ 2 05.05.2010 11:36
Взятие названий объектов из подзапроса euronymous SQL, базы данных 4 01.03.2010 06:34
Делить без остатка rangel PHP 4 30.07.2009 14:31
Взятие значения по адресу nusik Общие вопросы C/C++ 1 25.05.2009 01:59
Взятие интеграла max38934 Общие вопросы Delphi 2 11.05.2009 16:03