Рекурсия C: что происходит в стеке? - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в рекурсии, и я сделал этот код

#include <stdio.h>

int ft_recursive_factorial(int nb)
{
    if (nb > 1)
    {
        return(nb * ft_recursive_factorial(nb - 1));
    }
    return(1);
}

int main()
{
    printf("%d\n",ft_recursive_factorial(3));
    return(0);
}


Вывод

6

Я думаю, что код правильный, но я не могу понять, что происходит в стеке ... На мой взгляд, это происходит:

| Стек | | return (1 * ft_recursive_factorial (1 - 1)) | | return (2 * ft_recursive_factorial (2 - 1)) | | return (3 * ft_recursive_factorial (3 - 1)) | В этой схеме код будет остановлен на return(1 * ft_recursive_factorial(1 - 1)) из-за ответного ответа (в моей голове).

Может кто-нибудь объяснить мне, что происходит в стеке? пожалуйста.

1 Ответ

1 голос
/ 07 мая 2020

Чтобы объяснить это, это будет go вот так:

In main(), calling ft_recursive_factorial(3)
  In ft_recursive_factorial(nb == 3)
  nb > 1 is true, so
  Calling ft_recursive_factorial(2) from ft_recursive_factorial(3) 
    In ft_recursive_factorial(nb == 2)
    nb > 1 is true, so
    Calling ft_recursive_factorial(1) from ft_recursive_factorial(2) 
      In ft_recursive_factorial(nb == 1)
      nb > 1 is false, so 
      return 1
    back in ft_recursive_factorial(2), receiving result 1 from recursive call
    return nb(2) * recursive result(1) i.e. 2 to caller
  back in ft_recursive_factorial(3), receiving result 2 from recursive call
  return nb(3) * recursive result(2) i.e. 6 to caller
back in main(), receiving result 6.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...