Подсчитать количество вызовов рекурсивной функции - 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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек
  2. Объявление переменной count для подсчета вызовов рекурсивной функции
  3. Рекурсивная функция factoriz(x) принимает целочисленный аргумент x
  4. В функции factoriz(x) инициализируется переменная i со значением 2
  5. Переменная count увеличивается на единицу
  6. Запускается цикл while, который выполняется до тех пор, пока x не станет равным 1
  7. Внутри цикла while запускается вложенный цикл while, который выполняет деление x на i и проверяет, делится ли x на i без остатка
  8. Если x делится на i без остатка, то выводится значение i и вызывается рекурсивная функция factoriz(x/i)
  9. Значение переменной i увеличивается на единицу
  10. После выхода из вложенного цикла while, значение переменной x не равно 1, поэтому выполнение функции factoriz(x) продолжается
  11. Цикл while выполняется до тех пор, пока x не станет равным 1
  12. После выхода из цикла while, выполняется операция возврата значения x
  13. В функции main(void) выводится сообщение с приглашением ввести число для разложения на простые множители
  14. Пользователь вводит число для разложения на простые множители
  15. Вызывается функция factoriz(x) для разложения числа x на простые множители
  16. Выводится сообщение с результатом разложения числа на простые множители
  17. Выводится количество вызовов рекурсивной функции factoriz(x) с помощью переменной count
  18. Программа ожидает нажатия клавиши для продолжения работы
  19. Программа завершается
  20. Значение переменной count сбрасывается в ноль для следующего использования программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы