Đệ quy liệt kê vị trí các phần tử là số nguyên tố trong mảng một chiều

Các bác hướng dẫn ý tưởng giúp e với :
Liệt kê vị trí ở đó các phần tử là nguyên tố trong mảng một chiều các số nguyên dương.
Chỉ dùng đệ quy. Không dùng vòng lặp.

Chú ý khi dùng đệ quy là điều kiện dừng đệ quy, hay trường hợp đơn giản nhất.

Vậy bạn thử nghĩ xem khi nào thì nên dừng đệ quy. :slightly_smiling_face:

3 Likes

mình nghĩ điều kiện dừng là nếu mảng có 1 phần tử và phần tử đó là số nguyên tố thì return vị trí là 0, ngược lại return -1 nghĩa là không có. Còn cái đoạn phía sau không biết làm sao

1 Like

Chỗ này là đúng rồi.

Sao lại là return 0 mà không phải một số nào khác. :smiley:

Đề chỉ nói liệt kê vị trí là snt, return -1 để làm gì. :V
Đúng ra dùng void là đủ rồi chứ. :smiley:

3 Likes

mình nghĩ return 0 vì vị trí của nó bằng 0, còn hàm void không biết viết sao. Nếu bạn biết thì giúp mình với

Thực ra là không cần return gì cả, yêu cầu là liệt kê (in ra màn hình) cơ mà. :V

Suýt thì bỏ qua, nếu mảng rỗng thì sao. :smiley:


Gợi ý thêm nữa, vì đề kêu là in ra vị trí, vậy làm thế nào để biết vị trí của phần tử hiện tại trong mảng ban đầu?

3 Likes

Mảng luôn có phần tử (thầy nhập vào).
Còn đoạn sau thì mình chịu :frowning: Giúp với bạn ơi

Có gì để đảm bảo thầy không nhập một mảng rỗng không. :smiley:

Thôi thì viết tạm cho bạn thế này xem bạn có hình dung ra không.

void sher(int *a, int n, int i) {
    if (i >= n) return;
    
    if (isPrime(a[i])) printf("%d ", i + 1);
    
    sher(a, n, i + 1);
}


int main(){
    int a[] = {1, 2, 4, 5, 7, 3, 10};
    sher(a, 7, 0);
}
5 Likes

Cảm ơn bạn nhiều, mình hiểu rồi. Kiểm tra từng phần tử từ 0 tới n -1, nếu là số nguyên tố thì in ra. Nếu i >= n thì thoát.

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