Không hiểu lỗi logic trong C

Trước giờ mình cứ nghĩ hai đoạn code này giống nhau, mọi người giúp mình hiểu vấn đề với.

Cám ơn mọi người

Đoạn 1:

void try_3(int i) {
    for(int j = 0; j <= 1; j++) {
//        if(apprea[j] == 1 ) {
            x[i] = j;
//            apprea[j] = 0;
            if( i == n ) {
                for(int k2 = 1 ; k2  <= n ; k2++) {
                    printf("%d ",x[k2]);
                }
                printf("\n");
            }
            else try_3(i+1);
//            apprea[j] = 1;
//        }
    }
}

Đoạn 2:

void try_3(int i) {
    for(int j = 0; j <= 1; j++) {
//        if(apprea[j] == 1 ) {
            x[i] = j;
//            apprea[j] = 0;
            if( i == n ) {
                for(int k2 = 1 ; k2  <= n ; k2++) {
                    printf("%d ",x[k2]);
                }
                printf("\n");
            }
            try_3(i+1);
//            apprea[j] = 1;
//        }
    }
}

Khác có thêm else.

Một thằng là có điều kiện mới chạy, một thằng là luôn chạy (dù đúng hay sai). Phải khác nhau chứ!

Đoạn 2 chạy đến chết luôn (stackoverflow).D

4 Likes

Vì, i <= n, khi = n thì mình xuất kết quả, còn < n thì mình luôn gọi hàm kia rồi (thì có khác gì luôn chạy). Mình nghĩ vậy. Sao lại chạy đến chết được nhỉ

OK. mình hiểu rồi. Cám ơn bạn. Tự nhiên hồ đồ quá.

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