Рубрики

Практические вопросы для рекурсии | Комплект 5

Вопрос 1

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

#include<stdio.h>

  

int fun(int a, int b) 

{

   if (b == 0)

       return 0;

   if (b % 2 == 0)

       return fun(a+a, b/2);

  

   return fun(a+a, b/2) + a;

}

  

int main()

{

  printf("%d", fun(4, 3));

  getchar();

  return 0;

}

Выход: 12

Он вычисляет a * b (умноженное b).

вопрос 2
В вопросе 1, если мы заменим + на * и заменим return 0 на return 1, то что делает измененная функция? Ниже приведена измененная функция.

#include<stdio.h>

  

int fun(int a, int b)

{

   if (b == 0)

       return 1;

   if (b % 2 == 0)

       return fun(a*a, b/2);

  

   return fun(a*a, b/2)*a;

}

  

int main()

{

  printf("%d", fun(4, 3));

  getchar();

  return 0;

}

Выход: 64
Он вычисляет a ^ b (возведенный в степень b).

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

#include<stdio.h>

  

 int fun(int n)

 {

   if (n > 100)

     return n - 10;

   return fun(fun(n+11));

 }

  

int main()

{

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

  getchar();

  return 0;

}

Выход: 91

fun(99) = fun(fun(110)) since 99 ? 100
           = fun(100)    since 110 > 100
           = fun(fun(111)) since 100 ? 100
           = fun(101)    since 111 > 100
           = 91        since 101 > 100

Возвращаемое значение fun () равно 91 для всех целочисленных аргументов n 101. Эта функция называется функцией МакКарти 91 .

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

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

Практические вопросы для рекурсии | Комплект 5

0.00 (0%) 0 votes