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 ạ
Bài liên quan
Mình không hiểu ý của bạn lắm. Kết quả của khi mình run code.
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
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.
em hiểu một ít rồi ạ , nhờ cách túm váy của anh
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.