01/10/2018, 00:40

Giải thích dùm em code này cái ạ

#include<stdio.h>
void in(int i){
	if (i>10){
		in(i-1);
	}
	printf("%d
",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 ạ

viết 02:45 ngày 01/10/2018

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

Nguyễn Trọng Phương viết 02:56 ngày 01/10/2018

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é.

Người bí ẩn viết 02:54 ngày 01/10/2018

Đâ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

Chicken viết 02:48 ngày 01/10/2018

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.

Mạnh Hoàng Hữu viết 02:49 ngày 01/10/2018

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

Lương Quang Mạnh viết 02:49 ngày 01/10/2018

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.

Bài liên quan
0