Подсчитать количество вызовов рекурсивной функции - C (СИ)
Формулировка задачи:
подскажите пожалуйста что сделал не так
написал рекурсивный вариант програмы по факторизации чисел, вроде работает.
еще надо было подсчитать количество вызовов рекурсивной функции, а у меня каждый раз выводит 27
#include <conio.h>
#include <stdio.h>
int factoriz (int x)
{
int i,count=0;
i=2;
while (x!=1)
{
while (x%i==0)
{
count++;
printf("%i\n",i);
x=factoriz(x/i);
}
i++;
}
return x;
}
int main(void)
{
int x,count;
printf("Vvedite 4islo: \n\n");
scanf("%d",&x);
printf("---------------\n\n");
printf("1\n");
factoriz(x);
printf ("Rekursivnuy funkciy bilo vizvano %i raz\n", count);
getch();
return 0;
}Решение задачи: «Подсчитать количество вызовов рекурсивной функции»
textual
Листинг программы
#include <conio.h>
#include <stdio.h>
int count=0;
int factoriz (int x)
{
int i=2;
count++;
while (x!=1)
{
while (x%i==0)
{
printf("%i\n",i);
x=factoriz(x/i);
}
i++;
}
return x;
}
int main(void)
{
int x;
printf("Vvedite 4islo: \n\n");
scanf("%d",&x);
printf("---------------\n\n");
printf("1\n");
factoriz(x);
printf ("Rekursivnuy funkciy bilo vizvano %i raz\n", count);
getch();
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек
- Объявление переменной count для подсчета вызовов рекурсивной функции
- Рекурсивная функция factoriz(x) принимает целочисленный аргумент x
- В функции factoriz(x) инициализируется переменная i со значением 2
- Переменная count увеличивается на единицу
- Запускается цикл while, который выполняется до тех пор, пока x не станет равным 1
- Внутри цикла while запускается вложенный цикл while, который выполняет деление x на i и проверяет, делится ли x на i без остатка
- Если x делится на i без остатка, то выводится значение i и вызывается рекурсивная функция factoriz(x/i)
- Значение переменной i увеличивается на единицу
- После выхода из вложенного цикла while, значение переменной x не равно 1, поэтому выполнение функции factoriz(x) продолжается
- Цикл while выполняется до тех пор, пока x не станет равным 1
- После выхода из цикла while, выполняется операция возврата значения x
- В функции main(void) выводится сообщение с приглашением ввести число для разложения на простые множители
- Пользователь вводит число для разложения на простые множители
- Вызывается функция factoriz(x) для разложения числа x на простые множители
- Выводится сообщение с результатом разложения числа на простые множители
- Выводится количество вызовов рекурсивной функции factoriz(x) с помощью переменной count
- Программа ожидает нажатия клавиши для продолжения работы
- Программа завершается
- Значение переменной count сбрасывается в ноль для следующего использования программы