Рубрики

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

Вопрос 1
Рассмотрим следующую рекурсивную функцию C. Пусть len будет длиной строки s, а num будет количеством символов, напечатанных на экране. , дайте соотношение между num и len, где len всегда больше 0.

void abc(char *s)

{

    if(s[0] == '\0')

        return;

  

    abc(s + 1);

    abc(s + 1);

    printf("%c", s[0]);    

}

Ниже приведено соотношение между числами и длинами .

 num = 2^len-1 
s[0] is 1 time printed
s[1] is 2 times printed
s[2] is 4 times printed
s[i] is printed 2^i times
s[strlen(s)-1] is printed 2^(strlen(s)-1) times
total = 1+2+....+2^(strlen(s)-1)
      = (2^strlen(s)) - 1 

Например, следующая программа печатает 7 символов.

#include<stdio.h>

  

void abc(char *s)

{

    if(s[0] == '\0')

        return;

  

    abc(s + 1);

    abc(s + 1);

    printf("%c", s[0]);

}

  

int main()

{

    abc("xyz");

    return 0;

}

Спасибо Бхарату Нагу за предложение этого решения.

вопрос 2

#include<stdio.h>

int fun(int count)

{

    printf("%d\n", count);

    if(count < 3)

    {

      fun(fun(fun(++count)));

    }

    return count;

}

  

int main()

{

    fun(1);

    return 0;

}

Выход:

 1
 2
 3
 3
 3
 3
 3

Функция main () вызывает fun (1). fun (1) печатает «1» и вызывает веселье (fun (fun (2))). fun (2) печатает «2» и вызывает веселье (fun (fun (3))). Таким образом, последовательность вызова функций становится забавной (fun (fun (fun (fun (3)))))). fun (3) печатает «3» и возвращает 3 (обратите внимание, что count не увеличивается, и больше функций не вызывается, так как условие if не верно для count 3). Таким образом, последовательность вызовов функций сводится к веселью (fun (fun (fun (3)))). fun (3) снова печатает «3» и возвращает 3. Таким образом, вызов функции снова сводится к веселью (fun (fun (3))), который снова печатает «3» и превращается в fun (fun (3)). Это продолжается, и мы получаем «3» на экране 5 раз.

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

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

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

0.00 (0%) 0 votes