Рекурсия (печать строки введенного текста в обратном порядке) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста, разобраться в следующей программе: вводится строка текста с клавиатуры и выводится рекурсивно в обратном порядке Вот код:
#include <stdio.h>
 
void reverse( char *); 
   
int main( void )
{  
   char sentence[ 80 ]; /* create char array */
 
   printf( "Enter a line of text:\n" );
 
   gets( sentence); 
 
   printf( "\nThe line printed backward is:\n" );
   reverse( sentence );
   return 0; /* indicates successful termination */
} 
 
/* recursively outputs characters in string in reverse order */
void reverse( char * sPtr )
{  
   
   if ( sPtr[ 0 ] == '\0' ) 
      return; 
   } 
   else { 
      reverse( &sPtr[ 1 ] ); 
      putchar( sPtr[ 0 ] ); 
   }
}
Непонятно одно, как putchar в функции reverse печатает символы в обратном порядке. Ведь порядок следования двух операторов в части else структуры if приводит к тому что функция reverse переходит к граничному NULL строки до вывода символа на печать. Как только рекурсивный вызов завершается, символы выводятся в обратном порядке ( а почему так???).

Решение задачи: «Рекурсия (печать строки введенного текста в обратном порядке)»

textual
Листинг программы
#include <stdio.h>
 
void reverse(char * sPtr)
{
    if(*(sPtr + 1)) 
        reverse(sPtr + 1); 
    putchar( *sPtr ); 
}
 
int main()
{
    char sentence[80] = {0};
    printf("Enter text (less than 80 chars)\n");
    gets(sentence); 
    reverse(sentence);
    printf("\nEnter any key to continue\n");
    getchar();//Ñòîï-òî÷êГ*
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы