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: