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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2012, 16:09   #1
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию как работает эта программа? C++ степень

как работает эта программа?

непонятно вот это
Код:
x=power3(x, n/2)*power3(x, n/2);

Код:
#include <iostream>
//степень числа x^n
using namespace std;
int power3(int x, int n);

int main()
{
	cout << power3(4, 4)<<endl;
	system ("pause");
	return 0;
	
}

int power3(int x, int n)
{
	if(n==0) return 1;
	else if (n % 2 == 0) 
		x=power3(x, n/2)*power3(x, n/2);

	else if (n % 2 !=0) x=power3(x, n/2)*power3(x, n/2)*x;

	return x;

}
severest вне форума Ответить с цитированием
Старый 03.07.2012, 16:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
непонятно вот это
Это называется рекурсия. Когда функция сама себя вызывает пока не наступит определенное условие (в твоем случае пока n>0)
Видимо программа рассчитывает некий математический ряд
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.07.2012, 19:58   #3
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию

можете её протрассировать?
severest вне форума Ответить с цитированием
Старый 03.07.2012, 20:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Зачем?.....
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.07.2012, 20:37   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Эта программа представляет собой алгоритм быстрого возведения в степень.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.07.2012, 21:16   #6
severest
Пользователь
 
Регистрация: 18.04.2011
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Зачем?.....
чтоб разобраться
начало x=4 n=4
n четное
x=power3(4, 4/2=2)*power3(4, 4/2=2);

power3(4,2)
n четное
x=power3(4, 2/2=1)*power3(4, 2/2=1)
потом что?
severest вне форума Ответить с цитированием
Старый 03.07.2012, 21:43   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтоб разобраться
Мне зачем?
Ты трассируй )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.07.2012, 21:48   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
потом что?
потом n - нечетное
x=power3(x,1/2=0)*power3(x,1/2=0)*x

power(x,0)=1

Кстати, не очень хорошо, что рекурсивный спуск осуществляется 2 раза вместо одного.
Код:
#include <iostream>
//степень числа x^n
using namespace std;
int power3(int x, int n);

int main()
{
	cout << power3(4, 4)<<endl;
	system ("pause");
	return 0;
}

int power3(int x, int n)
{
	if(n==0) return 1;
	else
	{
		int k=power3(x, n/2);
		if (n % 2 == 0)
			return k*k;
		else
			return k*k*x;
	}
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните как работает эта функция перевода из десятичной в восмеричную систему? severest Помощь студентам 1 02.07.2012 05:57
как работает эта программа(Алгоритм Рабина-Карпа с++)??? Lodas Общие вопросы C/C++ 1 18.12.2011 11:58
почему эта программа не считает количество букв? WitaliG Помощь студентам 3 24.01.2011 17:32
что делает эта программа и где ошибка? дангер Паскаль, Turbo Pascal, PascalABC.NET 27 28.01.2008 13:38
FHandle - говорит что нет, хотя эта же процедура успешно работает в модуле Dialogs, о mrandrey Общие вопросы Delphi 2 08.06.2007 15:21