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

Pham Van Hai viết 21:07 ngày 30/09/2018

Theo mình thấy thì lỗi là do mỗi lần goi đệ quy sapsep() thì mảng b[10] lại được khai báo, tức là có nhiều mảng b[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ảng b như là tham số hoặc khai báo b là biến toàn cục;

17XGOD viết 21:08 ngày 30/09/2018

à 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ó

Bài liên quan
0