Giải thích giúp code hàm đệ quy

#include<stdio.h>
void in(int i){
	if (i>10){
		in(i-1);
	}
	printf("%d\n",i);
}

int main(){
	in(20);
}

em nghĩ răng sau khi i <10 nó sẽ dừng luôn mà sao nó lại quay ngược lại thực hiện các câu lệnh ạ

1 Like

Mình không hiểu ý của bạn lắm. Kết quả của khi mình run code. :smiley:

1 Like

Nó là đệ quy nhé bác. Còn muốn tìm hiểu đệ quy là gì thì tìm trong diễn đàn mình nhé.

Đây là đệ quy. Mà mới học lập trình thì từ từ rồi hẳn tìm hiểu thằng này :slight_smile:

Nếu bạn muốn chạy đến 10 thì dừng thì bạn phải để printf("%d\n",i); lên trên
printf("%d\n",i);
if (i>10){
in(i-1);
}
Nếu i > 20 thì nó chỉ gọi hàm in(int i) mà nó chưa gọi đến dòng printf("%d\n",i);
Đến khi i <= 10 thì lúc đó nó mới gọi đến dòng printf("%d\n",i); lúc này những hàm in(i-1) gọi trong đệ quy chưa chạy xong đến cái dòng printf("%d\n",i); dưới if() thì nó quay lại gọi cho chạy xong hết nó mới thoát. Đệ quy lằng nhằng vậy đó.
Túm cái váy lại là khi hàm đệ quy chưa thực hiện xong hết hàm thì nó chưa dừng lại đâu nó sẽ lưu trong bộ nhớ lát nữa khi thực hiện xong điều kiện thì sẽ quay lại chay cho xong.

3 Likes

em hiểu một ít rồi ạ , nhờ cách túm váy của anh

1 Like

Hiểu đơn giản thế này, đệ quy thực hiện ngược lại so với vòng lặp. Tức là bạn sẽ thực hiện bước cuối cùng trước rồi mới lộn ngược lên bước đầu.

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