Подсчитать количество вызовов рекурсивной функции - 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 сбрасывается в ноль для следующего использования программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д