Jour 1 – Produire des chaînes de manière récursive dans l'ordre inverse en utilisant le langage C

16629960 :

Description du sujet:

Entrez une chaîne continue sur le clavier jusqu'à ce que vous appuyiez sur Entrée, et l'écran affichera la chaîne dans l'ordre inverse. Par exemple, si vous saisissez : Je suis un homme !, vous obtiendrez le résultat : ! nam mal.

Analyse du sujet :

L'idée de récursivité est utilisée dans la question, pensez donc à créer une sous-fonction responsable de la récursivité, puis affichez la chaîne précédemment saisie dans l'ordre inverse.

le code s'affiche comme ci-dessous :

#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 );
}

Exemple de sortie :

 

Compréhension des sous-fonctions :

Bref résumé : Le caractère saisi en premier n'exécutera pas la fonction printf() car il doit entrer dans le niveau de récursion suivant. La fonction printf() ne sera pas exécutée tant que la récursivité ne reviendra pas à ce niveau, imprimant ainsi les caractères précédemment stockés. .

Définissez d'abord la variable ch_input pour stocker la variable de caractère obtenue par la fonction getchar()

Utilisez ensuite if pour déterminer si la variable est un "retour chariot (\n)". Dans le cas contraire, entrez le niveau de récursion suivant et continuez à saisir le caractère suivant ; si c'est le cas, utilisez l'instruction return pour indiquer qu'un retour chariot le personnage a été rencontré, et la récursion quittera ce niveau de retour. Allez au niveau supérieur ;

Ce n'est que lorsque le jugement if échoue et que l'instruction if se termine que la fonction printf() suivante sera exécutée. À ce stade, l'exécution se fait au niveau le plus interne de la récursion. La fonction printf() la plus interne est exécutée en premier, puis poussée au niveau supérieur pour exécuter à nouveau la fonction printf.() pour obtenir une sortie dans l'ordre inverse.

En revenant à la couche précédente et en exécutant la fonction printf(), une sortie dans l'ordre inverse est obtenue.

loi:

Si la fonction printf() est placée avant l'appel récursif, la sortie sera dans l'ordre positif.

Si la fonction printf() est placée après l'appel récursif, la sortie sera dans l'ordre inverse.

Compréhension récursive :

La récursivité est en fait une étape au cours de laquelle une fonction s'appelle pour implémenter sa propre fonction à plusieurs reprises.

S'appeler est en fait le processus par lequel une fonction appelle une autre fonction, mais l'autre fonction ici s'avère être moi-même.

En récursivité, cela peut en fait être vu comme allant couche par couche.

 Le grand carré de gauche est considéré comme une fonction et la fonction est nommée A. Après avoir exécuté les instructions séquentiellement, le petit carré du milieu appelle à nouveau la fonction A, donc le code de la fonction A est exécuté depuis le début dans la couche suivante. La fonction A elle-même n'est pas appelée dans la couche suivante, mais le bloc de poisson B est exécuté . Une fois l'exécution terminée, il continuera à exécuter le code restant de la couche actuelle. Une fois terminé, il reviendra à l'emplacement où A vient d'être appelé dans la première couche, puis continuera l'exécution.

Sur la base des idées ci-dessus, nous pouvons constater qu’il ne s’agit pas d’une idée d’appel de fonction ordinaire.

Appel de fonction : A appelle B, B appelle C, C appelle D, D revient à C, C revient à B et B revient à A.

Par conséquent, si vous utilisez l'idée d'appeler une fonction pour écrire un programme récursif

Remarque : La limitation de l'écriture avec des fonctions est que chaque couche doit écrire une fonction distincte, donc je n'en écris que trois, ce qui signifie que seules trois couches de récursion sont exécutées.

Exemple de code :

#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 ;
}

Exemple de sortie :

De plus, comme il n'y a que trois sous-fonctions, si le nombre de caractères saisis dépasse 3, une perte de sortie se produira.

Exemple de sortie 

Remplir:

En utilisant l'idée récursive, vous pouvez implémenter le FIFO premier entré, premier sorti de la file d'attente et le FILO premier entré, dernier sorti de la pile dans la structure de données.

Référence de l'article :

Pratique quotidienne du langage C - Jour 18 : Utiliser l'appel de fonction récursif pour imprimer les caractères saisis dans l'ordre inverse_Blog de Xiaohui_Super-Blog CSDN icon-default.png?t=M3K6https://blog.csdn.net/weixin_43772810/ article/details/120464271

Comprendre la nature de la récursion : récursion et pile blog-CSDN blog_recursive de stack_bobbypapa icon-default.png?t=M3K6https://blog.csdn.net/bobbypollo/article/details/79891556

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_43323677/article/details/124346649
conseillé
Classement