01/10/2018, 12:00

Cần giúp đỡ thuật toán xâu nhị phân n phần tử C

#include<stdio.h>
void pr(int s[], int n);
void trye(int i,int s[],int n);

void pr(int s[], int n)
{
	int i;
	for(i=0;i<=n;i++)
		printf("%d ",s[i]);
	printf("
");
}
void trye(int i,int s[],int n)
{
	int j;
	for(j=0;j<=1;j++)
	{
 		s[i]=j;
		if(i==n) pr(s,n);
		else trye(i+1,s,n);
	}
}
int main()
{
	int n=1;
	int	s[4];
	printf("
");
	trye(0,s,n);
} 

Trong quá trình em debug,sau khi em in ra được 00 ,01 thì vòng lặp đáng lý phải thoát ra và trở về hàm main, nhưng đây nó quay lại với giá trị i=0,j=0.Mong các cao nhân debug sau giải đáp giúp em hiểu chổ đó

Nguyễn Duy Hùng viết 14:06 ngày 01/10/2018

thử sửa lại if(i == n-1) xem sao :v

Nguyễn Lân viết 14:06 ngày 01/10/2018

Thưa anh , thật ra bài toán em là đúng nếu đổi n-1 thì sẽ mất đi sự chính xác của bài toán ạ, dù sao vẫn cảm ơn anh.

Nguyễn Đình Biển viết 14:10 ngày 01/10/2018

Mình thấy gì sai đâu :v

Nguyễn Lân viết 14:08 ngày 01/10/2018

Thưa anh,em không nói bài này sai ạ , chỉ là trong lúc debug sau khi in ra được gt 0 0 và 0 1, thì đáng lý nó phải quay về hàm main nhưng nó lại hàm trye với giá trị i=0,và sau đó nó thực hiện lệnh for và in ra tiếp gt 1 0 và 1 1

Nguyễn Lân viết 14:00 ngày 01/10/2018

i ạ , chỉ là trong lúc debug sau khi in ra được gt 0 0 và 0 1, thì đáng lý nó phải quay về hàm main nhưng nó lại hàm trye với giá trị i=0,và sau đó nó thực hiện lệnh for và in ra

anh có thể giải thích giúp em vì sao nó không quay về hàm main mà tiếp tục in ra gt 10 và 11 được không anh (anh debug mới thấy rõ ạ)

Nguyễn Đình Biển viết 14:00 ngày 01/10/2018

Nó trở lại thằng gọi nó là Trye(0), lúc này j của Trye(0) đang là 0 nhảy tiếp vòng For lên thành 1 tiếp tục gọi Trye(1) như nãy nhưng với j = 1.

Nguyễn Đình Biển viết 14:07 ngày 01/10/2018

Tưởng tượng đơn giản thì nó như có N vòng For lồng vào nhau đấy. Chạy hết vòng For này lại trở vòng lặp For trước.

Nguyễn Lân viết 14:16 ngày 01/10/2018

Em cảm ơn cao nhân đã nhiệt tình thông não giúp em bây giờ em đã hiểu ạ ToT

Bài liên quan
0