Dia 1 - Saída recursiva de strings em ordem inversa usando linguagem C

16629960:

Descrição do tópico:

Insira uma sequência contínua no teclado até pressionar Enter e a tela exibirá a sequência na ordem inversa. Por exemplo, se você inserir: Iam man!, obterá a saída:! nome mal.

Análise do tópico:

A ideia de recursão é usada na pergunta, então considere criar uma subfunção responsável pela recursão e, em seguida, gerar a string inserida anteriormente na ordem inversa.

código mostrado abaixo:

#include <stdio.h>

void reverse_output () ;
int main ()
{
    printf ( "请输入字符串,以回车结束 :\n" );

    reverse_output ();

    printf ( "\n以上是反序的输出 " );

    return 0;
}

void reverse_output ( )
{
    char ch_input;
    ch_input=getchar(  );

    if ( ch_input != '\n' )
        reverse_output () ;
    else
        return ;

    printf ( "%c" , ch_input );
}

Exemplo de saída:

 

Compreensão das subfunções:

Breve resumo: O caractere inserido primeiro não executará a função printf() porque precisa entrar no próximo nível de recursão. A função printf() não será executada até que a recursão retorne a este nível, imprimindo assim os caracteres armazenados anteriormente .

Primeiro defina a variável ch_input para armazenar a variável de caractere obtida pela função getchar()

Em seguida, use if para determinar se a variável é "retorno de carro (\n)". Caso contrário, insira o próximo nível de recursão e continue inserindo o próximo caractere; se for, use a instrução return para indicar que um retorno de carro personagem foi encontrado e a recursão sairá deste nível de retorno.Vá para o nível superior;

Somente quando o julgamento if falhar e a instrução if terminar, a seguinte função printf() será executada. Neste momento, a execução está no nível mais interno da recursão. A função printf() mais interna é executada primeiro e depois empurrada para o nível superior para executar printf novamente.() função para obter saída de ordem reversa.

Ao retornar à camada anterior e executar a função printf(), a saída de ordem inversa é alcançada.

lei:

Se a função printf() for colocada antes da chamada recursiva, a saída estará em ordem positiva.

Se a função printf() for colocada após a chamada recursiva, a saída estará na ordem inversa.

Compreensão recursiva:

A recursão é na verdade uma etapa na qual uma função chama a si mesma para implementar repetidamente sua própria função.

Chamar a si mesma é na verdade o processo de uma função chamar outra função, mas a outra função aqui acaba sendo eu mesma.

Na recursão, isso pode realmente ser visto como indo camada por camada.

 O grande quadrado à esquerda é considerado uma função e a função é denominada A. Depois de executar as instruções sequencialmente, o pequeno quadrado no meio chama a função A novamente, de modo que o código da função A é executado desde o início na próxima camada. A função A em si não é chamada na próxima camada, mas o bloco de peixe B é executado Após a conclusão da execução, ele continuará a executar o código restante da camada atual. Após a conclusão, ele retornará ao local onde A acabou de ser chamado na primeira camada e continuará a execução.

Com base nas ideias acima, podemos descobrir que esta não é uma ideia comum de chamada de função.

Chamada de função: A chama B, B chama C, C chama D, D retorna para C, C retorna para B e B retorna para A.

Portanto, se você usar a ideia de chamada de função para escrever um programa recursivo

Nota: A limitação de escrever com funções é que cada camada deve escrever uma função separada, então escrevo apenas três, o que significa que apenas três camadas de recursão são executadas.

Exemplo de código:

#include <stdio.h>
void A();
void B();
void C();

//主函数中去调用A函数
int main ()
{

    printf ( "请输入字符串,以回车结束 :\n" );
    A();

    return 0;
}

void A ()
{
    int ch=getchar();
    B();                    //调用下一层函数
    printf ( "%c" , ch );
    return ;
}

void B ()
{
    int ch=getchar();
    C();                    //调用下一层函数
    printf ( "%c" , ch );
    return ;
}

void C()
{
    int ch=getchar();
    printf ( "%c" , ch );        //没有继续调用,所以开始返回上一层
    return ;
}

Exemplo de saída:

Além disso, como existem apenas três subfunções, se o número de caracteres de entrada exceder 3, ocorrerá perda de saída.

Exemplo de saída 

Reabastecimento:

Usando a ideia recursiva, você pode implementar o FIFO primeiro a entrar, primeiro a sair da fila e o FILO primeiro a entrar, último a sair da pilha na estrutura de dados.

Referência do artigo:

Prática diária da linguagem C - Dia 18: Use chamada de função recursiva para imprimir os caracteres inseridos em ordem inversa_Blog de Xiaohui_Super-blog CSDN icon-default.png?t=M3K6https://blog.csdn.net/weixin_43772810/article/details/120464271

Compreendendo a natureza da recursão: recursão e stack_bobbypapa blog-CSDN blog_recursive stack icon-default.png?t=M3K6https://blog.csdn.net/bobbypollo/article/details/79891556

 

Acho que você gosta

Origin blog.csdn.net/qq_43323677/article/details/124346649
Recomendado
Clasificación