Hàm return và đệ quy trong C

Mn giúp mình với mình ms học lập trình mà mình được biết khi gặp return sẽ thoát chương trình mà sao hàm đệ quy này lại cho kết quả như vậy.

#include <stdio.h>
#define SIZE 80
void reverse( const char * const sPtr );
int main( void )
 {
 char sentence[ SIZE ]; // create char array
 puts( "Enter a line of text:" );
 fgets( sentence, SIZE, stdin ); 
 puts( "\nThe line printed backward is:" );
 reverse(sentence);
 } // end main
// recursively outputs characters in string in reverse order
 void reverse( const char * const sPtr )
{
 // if end of the string
if ( '\0' == sPtr[ 0 ] ) {
 // base case
 return;
  } // end if
 else { 
 reverse( &sPtr[ 1 ] ); // recursion step
putchar( sPtr[ 0 ] );// if not end of the strin
 } // end else
 } // end function reverse

Kết quả:

Enter a line of text:
Characters and Strings
The line printed backward is:
sgnirtS dna sretcarahC

Chỉ có return trong hàm main mới thoát chương trình, còn dùng đệ quy thì đặc biệt hơn một chút nhưng thường chẳng ai đi dùng đệ quy trong hàm main đâu.

5 Likes

:upside_down_face:
Ai chỉ bạn vậy?

5 Likes

À e hiểu return rồi mà sao mỗi lần reverse( &sPtr[ 1 ] ); nó lại in ngược lại vậy ạ

Đệ quy thực hiện từ cuối lên cộng thêm với gọi đệ quy trước print thì việc in ngược là chuyện đương nhiên rồi ạ. Nếu cần hiểu thêm thì anh thử vẽ sơ đồ ra xem thử là hiểu.

3 Likes

Thiết nghĩ BTQ thêm nút haha =))

1 Like

Cảm ơn mn mình đã hiêu ,Minh ngu quá :((

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?