hic, chả biết code này dùng để làm gì luôn !
Đoạn code dưới bị sai ( chỗ biến n )
C Code:
đây là code bài liệt kê dãy nhị phân có độ dài n của em
nhưng mà đoạn quay lui thì đúng mà viết ra không đúng nới xem giùm em với huhu
Code:#include<stdio.h> #include<conio.h> void viet(int b[],int n) { int i; for(i=1;i<=n;i++) printf("%d",b[i]); printf("\n"); } void try1(int i,int n) { int j,b[10]; for(j=0;j<=1;j++) { b[i]=j; if (i==n) viet(b,n); else try1(i+1,n); } } void main() { int n,i; clrscr(); printf("nhap n"); scanf("%d",&n); try1(1,n); getch(); }
Đã được chỉnh sửa lần cuối bởi QuangHoang : 22-09-2008 lúc 08:23 AM.
hic, chả biết code này dùng để làm gì luôn !
Đoạn code dưới bị sai ( chỗ biến n )
C Code:
Đã được chỉnh sửa lần cuối bởi meoconlongvang : 21-09-2008 lúc 05:38 PM.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
mình xin lỗi bạn meolongvang..vì mình mới học con trỏ nên thử áp dụng vô cho thử ^^..thông cảm cho mình nha jio mình sửa lại rùi..bạn coi giúp mình với..đây là bài liệ kê dãy nhị phân N dùng đệ quy quay lui(hay là thử sai quay lui)..bạn add watch và xem lại giúp mình với cám ơn nha
đây là bài liệt kê tất cả các dãy nhị phân của n phàn tử..bằng thuật toán "thử sai quay lui"
đây là code đúng khi mà khi báo b[10] là biến toàn cục
còn đây là code sai mà em không bít là sai chỗ nào khi b[10] ở trong chương trình conCode:#include<stdio.h> #include<conio.h> int n,i,b[10]; void viet() { for(i=1;i<=n;i++) printf("%d",b[i]); printf("\n"); } void try1(int i) { int j; for(j=0;j<=1;j++) { b[i]=j; if (i==n) viet(); else try1(i+1); } } void main() { clrscr(); printf("nhap n"); scanf("%d",&n); try1(1); getch(); }
các bạn test thử rùi cho mình biết thíu sót chỗ nào nha thanksCode:#include<stdio.h> #include<conio.h> int n; void viet(int b[]) { int i,n=3 ; for(i=1;i<=n;i++) printf("%d",b[i]); printf("\n"); } void try1(int i) { int j, b[10]; for(j=0;j<=1;j++) { b[i]=j; if (i==n) viet(b); else try1(i+1); } } void main() { clrscr(); printf("nhap n"); scanf("%d",&n); try1(1); getch(); }
Khi biến b là một biến của hàm con, thì cứ một lần nó gọi lại đệ qui thì nó sẽ cấp phát cho b một địa chỉ khác.(b lần i với b lần i+1 khác nhau.)
do đó chương trình của bạn chạy ra kết quả sai là đúng rồi.
chúc bạn thành công.
Đã được chỉnh sửa lần cuối bởi zkday2686 : 21-09-2008 lúc 11:37 PM.
Có gì đâu mà bạn xin lỗi. Đây là code mình sửa lại nè :
C Code:
#include<stdio.h> #include<conio.h> void viet(int *b, int n) { for(int i=1;i<=n;i++) } void try1(int i, int *b, int n) { for(int j=0;j<=1;j++) { b[i]=j; if (i==n) viet(b,n); else try1(i+1,b,n); } } void main() { int b[10]; int n; clrscr(); try1(1,b,n); getch(); }
Đã được chỉnh sửa lần cuối bởi meoconlongvang : 21-09-2008 lúc 11:56 PM.
Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.
uh cám ơn nhiều nha