Чтобы понять эту рекурсивную программу на С, чтобы напечатать строку в обратном порядке, нужно пояснение - PullRequest
0 голосов
/ 01 октября 2018

Я не могу понять, когда выполняется строка путчара и как она помогает повернуть строки ввода?Если происходит EOF, выполняется оператор return, но что происходит после этой строки?

#include<stdio.h>
int fun_reverse();
void main(){

    fun_reverse();
}

int fun_reverse(){

    int ch ;
    ch = getchar();
    if(ch==EOF)
        return;

    fun_reverse();
    putchar(ch);
}

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Хотя на ваш вопрос уже дан ответ, я бы посоветовал вам прочитать о ' рекурсии головы ' и ' рекурсии хвоста '.Посмотрите на принятый ответ на этот вопрос .

0 голосов
/ 01 октября 2018

каждый раз, когда вы вызываете fun_reverse в вашей функции fun_reverse, он не печатает введенный символ сразу, просто запрашивает ввод другого, складывает запросы (и создает столько локальных переменных, которые хранят каждыйchar) до достижения EOF.

Когда встречается EOF, fun_reverse возвращается без повторного вызова fun_reverse, завершая цепочку, заставляя всех вызывающих абонентов возвращаться и в конечном итоге печатать результаты.

Тот факт, что вызовы были наложены из-за рекурсии, имеет эффект обращения вспять, потому что их разбор производится наоборот.

Этот метод часто используется для преобразования числа в строкубез какого-либо дополнительного буфера.Преобразование числа в строку сначала дает «неправильный» конец числа, поэтому вам нужно буферизовать числа, пока цифры не будут полностью обработаны.Алгоритм, аналогичный приведенному выше, позволяет сохранять цифры и распечатывать их в читаемом порядке.

...