Получить вызов функции в C - PullRequest
0 голосов
/ 17 декабря 2018

Почему эта рекурсивная функция попадает в бесконечный цикл?Показывает, что значение Val не уменьшается.В чем логика.

int Bar(int Val) // value passed is 3
{
    int x=0;
    while (Val>0)
    {
        x=x+Bar(val-1);
    }
    return Val
}

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

@ linuxfan прав.

Возможно, вы захотите сделать следующее:

while (val>0) {  
  x=x+bar(--val);
}

, которые оба передают значение, уменьшенное на 1, и изменяют переменную цикла.

Обратите внимание на другое: предположим, что выс ошибками Val и val, если они являются одной и той же переменной, возвращаемое значение будет всегда 0, поскольку цикл завершается, когда val равен 0, а затем возвращает это значение.

Попробуйте этот код:

#include<stdio.h>
int Bar(int val) // value passed is 3
{
    int x=0;
    while (val>0)
    {
        x=x+Bar(--val);
    }
    printf("%d\n", val);
    return val;
}

int main (void)
{
  Bar(3);
  return 0;
}
0 голосов
/ 17 декабря 2018

Это не рекурсия, а цикл while, который никогда не заканчивается.

while (val>0) {  
  x=x+bar(val-1);
}

В этом цикле вы никогда не измените значение val.Таким образом, цикл никогда не заканчивается.

...