Как я могу рассчитать рекурсивные вызовы этой функции и каков будет правильный ответ на нее ??????
int func(x,y)
{
if (x % y == 0) return y;
x = x % y;
return func(y,x);
}
Мне нужна формула для этого или объяснение или общее выражение для этого действительно запутанным здесь ?????
с помощью глобальная переменная это простое решение.
int i;
main()
{
i=0; //if you want to avoid main call just start with i=-1
//if you are using loop and then calling function in loop ,
//make i value zero or -1 to know how many recursive calls are made to particular call.
func(x,y);
//now i consists number of recursive calls made.
}
int func(int x,int y)
{
i++;
if (x % y == 0) return m;
x = x % y;
return func(y,x);
}
Во-первых, ваш код не будет компилироваться. Вам нужно дать x
а также y
типы как int
или же long
, Во-вторых, вы, вероятно, хотите заказать x
а также y
прежде чем делать что-то еще. Что-то вроде:
int func(int x, int y) {
int mx = max(x, y);
int mn = min(x, y);
// as above with mx for x and mn for y
}
Как узнать количество звонков?
Ну, есть два пути.
Инструмент код: добавить переменную, которая считает до вершины функции, и когда функция завершит работу, выведите счетчик.
Пройдите код самостоятельно: Притворись компьютером, просчитай каждый шаг и следуй пути решения. Сделайте это для различных входов и посмотрите, какие результаты это даст вам. Подсчитайте количество шагов, которое требуется. Не забудьте учесть, куда вы возвращаетесь — рекурсивные функции возвращаются обратно к себе.
Как найти правильный ответ?
Как и выше.
Я бы изменил вашу функцию на это:
int func(int x, int y, int& n)//I asume x and y are ints
{
if (x % y == 0) return y;
x = x % y;
return func(y,x, n+1);//not sure if I understood question correctly, so I think you need to change n value here.
}
int func(int x, int y, int& n)//I asume x and y are ints
{
++n;//not sure if I understood question correctly, it may be you need this place for count variable increment
if (x % y == 0) return y;
x = x % y;
return func(y,x, n);
}
И чтобы использовать эту функцию вам понадобится:
int x = 1000, y = 7, n = 0;
int ret = func(x, y, n); //n must be zero
Кстати, вы также можете использовать глобальные переменные, однако это не лучший опыт, поэтому лучше передать еще один параметр в функцию.