30/09/2018, 18:59
Có ai giải thích hộ chỗ này giúp em với?
Tại sao khi em code thế này
void sapxep(nguoi a[],int n,int j){
nguoi b[40];
for (int i=1;i<=n;i++){
b[j]=a[i];
if (j==n) xuathoanvi(b,n);
else sapxep(a,n,j+1);
}
}
main(){
nguoi ds[40];
int n,k;
nhapsonguoi(n);
nhapDS(ds,n);
sapxep(ds,n,1);
getch();
}
thì màn hình kết quả là giá trị rác nhưng khi code
for (int i=1;i<=n;i++){
b[j]=a[i];
if (j==n) xuathoanvi(b,n);
else sapxep(a,n,j+1,b);
}
}
thì màn hình lại ra kết quả không có giá trị rác
Bài liên quan
Theo mình thấy thì lỗi là do mỗi lần goi đệ quy
sapsep()
thì mảngb[10]
lại được khai báo, tức là có nhiều mảngb[40]
là khác nhau trong mỗi lần gọi đệ quy.Để mảng
b
là chung cho tất cả lần gọi đệ quy thì tốt nhất la truyền mảngb
như là tham số hoặc khai báob
là biến toàn cục;à em hiểu rồi vậy như code đầu tiên là mỗi lần đệ quy nó lại tạo ra một mảng
b[40]
còn code 2 thì chỉ tạo 1 lần rồi gọi lại chính nó