Сколько раз вызывается функция вычисления? В C - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть один вопрос. Я хочу написать программу с Фибоначчи, но у меня есть проблема.

"Каждый раз, когда функция вызывается из основной функции, она должна распечатать, сколько раз она была вызвана"

Я пытаюсь добавить счетчик, но каждый раз счетчик равен 1. Thx

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы должны использовать переменную stati c, или вы можете передать переменную count для каждого вызова. Нижеследующее относится к переменному регистру

*1001*
#include<stdio.h> 
int fib(int n) 
{ static int count = 0; 
  count++; 
  printf("%d", count); 
   if (n <= 1) 
      return n; 
   return fib(n-1) + fib(n-2); 
} 

int main () 
{ 
  int n = 9; 
  printf("%d", fib(n)); 
  getchar(); 
  return 0; 
} 
0 голосов
/ 24 апреля 2020

Ваша первая попытка добавить счетчик, который всегда равен 1, говорит мне, что вы новичок. Одна очень важная концепция, с которой вам нужно разобраться - это «сфера действия». Когда вы создаете локальную переменную в функции, переменная выделяется из стека каждый раз, когда вызывается функция, и рассматривается как "в области действия" на протяжении всей функции, пока вы не вернетесь. Когда вы возвращаетесь из функции, память, выделенная для переменной, освобождается и больше не считается "в области видимости". Без конкретного указания компилятору, что вы хотите, чтобы переменная зависала (используя ключевое слово static), вы не гарантированно получите тот же кусок памяти, и даже если вы действительно получили тот же кусок памяти, очень вероятно, что какая-то другая функция использовала его и уничтожила любое значение, которое там было.

Поэтому, чтобы конкретно ответить на ваш вопрос, вы должны использовать ключевое слово static в объявлении переменной для своего счетчика, например static int counter = 0; с начальным значением 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...