Рубрики

Практические вопросы для рекурсии | Набор 4

Вопрос 1
Прогнозировать вывод следующей программы.

#include<stdio.h>

void fun(int x)

{

  if(x > 0)

  {

     fun(--x);

     printf("%d\t", x);

     fun(--x);

  }

}

  

int main()

{

  int a = 4;

  fun(a);

  getchar();

  return 0;

}

Выход: 0 1 2 0 3 0 1

 
                   fun(4);
                   /
                fun(3), print(3), fun(2)(prints 0 1)
               /
           fun(2), print(2), fun(1)(prints 0)
           /
       fun(1), print(1), fun(0)(does nothing)
       /
    fun(0), print(0), fun(-1) (does nothing)

вопрос 2
Прогнозировать вывод следующей программы. Что вообще делает следующее fun ()?

int fun(int a[],int n)

{

  int x;

  if(n == 1)

    return a[0];

  else

    x = fun(a, n-1);

  if(x > a[n-1])

    return x;

  else

    return a[n-1];

}

  

int main()

{

  int arr[] = {12, 10, 30, 50, 100};

  printf(" %d ", fun(arr, 5));

  getchar();

  return 0;

}

Выход: 100
fun () возвращает максимальное значение во входном массиве a [] размера n.

Вопрос 3
Прогнозировать вывод следующей программы. Что вообще делает следующее fun ()?

int fun(int i)

{

  if ( i%2 ) return (i++);

  else return fun(fun( i - 1 ));

}

  

int main()

{

  printf(" %d ", fun(200));

  getchar();

  return 0;

}

Выход: 199
Если n нечетно, то возвращает n, иначе возвращается (n-1). Например, для n = 12 вы получите 11, а для n = 11 вы получите 11. Оператор «return i ++;» возвращает значение i только в том случае, если оно является постинкрементным.

Пожалуйста, пишите комментарии, если вы обнаружите, что какие-либо ответы / коды неверны, или вы хотите поделиться дополнительной информацией / вопросами по темам, обсужденным выше.

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

Практические вопросы для рекурсии | Набор 4

0.00 (0%) 0 votes