Почему эта функция возвращает целое число 17 после завершения рекурсивного запуска? - PullRequest
0 голосов
/ 25 сентября 2019

По моему мнению, функция должна возвращать 2 в качестве ответа, потому что каждый раз, когда функция вызывается рекурсивно, статической переменной 'r' снова присваивается ноль.Примечание: переданный аргумент в функции равен 5.

int fun(int n){
static int r=0;
  if(n<=0)return 0;
  else if(n>3){
   r=n;
   return fun(n-2)+2;
}
  else return fun(n-1)+r;
}

Функция фактически возвращает 17, когда ей передается 5.

1 Ответ

0 голосов
/ 25 сентября 2019

Заменить

static int r=0;

на

static int r;
r = 0;

Статические переменные инициализируются только один раз перед главной.Вы должны явно инициализировать его в 0 каждый раз, когда вам нужно это сделать.

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