Рубрики

Вывод программ на C | Набор 11

На вопрос Шобхита

#include<stdio.h>

int fun(int n, int *fg)

{

   int t, f;

   if(n <= 1)

   {

     *fg = 1;

      return 1;

   }

   t = fun(n-1, fg);

   f = t + *fg;

   *fg = t;

   return f;

}

int main( )

{

  int x = 15;

  printf ( "%d\n", fun (5, &x));

  getchar();

  return 0;

}

В вышеприведенной программе будут рекурсивные вызовы, пока n не станет меньше или равно 1.

fun(5, &x) 
       \
         \
       fun(4, fg)
           \
             \
            fun(3, fg)
                 \
                   \
                   fun(2, fg)
                      \
                        \
                          fun(1, fg)

fun (1, fg) больше не вызывает fun (), потому что n теперь равно 1 и входит в часть if. Он изменяет значение по адресу fg на 1 и возвращает 1.

Внутри веселье (2, фг)

   t = fun(n-1, fg); --> t = 1
  /* After fun(1, fg) is called, fun(2, fg) does following */
   f = t + *fg;      -->  f = 1 + 1 (changed by fun(1, fg)) = 2
   *fg = t;           --> *fg = 1
  return f (or return 2)

Внутри веселье (3, фг)

   t = fun(2, fg); --> t = 2
  /* After fun(2, fg) is called, fun(3, fg) does following */
   f = t + *fg;       -->  f = 2 + 1 = 3
   *fg = t;            --> *fg = 2
  return f (or return 3)

Внутри веселье (4, фг)

   t = fun(3, fg);   --> t = 3
  /* After fun(3, fg) is called, fun(4, fg) does following */
   f = t + *fg;       -->  f = 3 + 2 = 5
   *fg = t;            --> *fg = 3
   return f (or return 5)

Внутри веселье (5, фг)

   t = fun(4, fg);   -->  t = 5
  /* After fun(4, fg) is called, fun(5, fg) does following */
   f = t + *fg;       -->  f = 5 + 3 = 8
   *fg = t;            --> *fg = 5
   return f (or return 8 )

Наконец, возвращается значение, возвращаемое функцией fun (5, & x), поэтому на экране выводится 8

Рекомендуемые посты:

Вывод программ на C | Набор 11

0.00 (0%) 0 votes