Nội dung đề bài như sau : in ra tất cả hoán vị của n số đầu tiên, dùng pp đệ quy. Về hướng đi thì mình nghĩ như sau : đi từ số đầu tiên đến số cuối cùng, mỗi số ta gán sau nó hoán vị của n-1 số còn lại. Nhưng về trình bày qua C++ thì mình chưa làm ra cái hoanvi(n-1) còn lại. tạm thời demo cái của mình như sau, xuất ra dãy n số rồi :( À còn nữa, các bạn đừng đưa code ra luôn nha, chỉ cho mình cái dàn bài thôi. :d Cám ơn trước [spoil]#include <iostream.h> void hoanvi(int n); void main() { int n; cout<<"Nhap vao n: \n",cin>>n; hoanvi(n); } void hoanvi(int n) { int i; if(n==1) { cout<<1<<endl; return; } else { for(i=1;i<=n;i++) { cout<<i; } cout<<endl; } } [/spoil]
hơ, hoán vị có phải là n! không nhỉ, đây là bài tìm n! còn gì Mã: int giaithua(int n) { if(n != 1) return n*giaithua(n-1); else return n; }
Hoán vị đệ quy thì thế này Bước thứ i chọn phần tử thứ i phần tử thứ i là các phần từ chưa được cho vào hoán vị từ 1->i-1 ( dùng mảng đánh dấu ) Đệ quy tiếp phần tử i+1. Nhớ gán mảng đánh dấu và trả lại đánh dấu sau khi đệ quy
Sau 1 thời gian mò mẫm, mình cũng ra đc hoán vị, nhưng phải nhập 1 dãy vào rồi mới hoán vị dãy đó. Nhưng đề bài lại là nhập số n thôi. VD : bài của tớ phải nhập 1234 thì nó hoán vị chuỗi 1234. Nhưng đề là : nhập số 4, và ra hoán vị của 1234. Mình định nhập n, dùng dòng lập for để in ra chuỗi từ 1 đến n. Nhưng sau đó làm sau thì bí . Mong mọi người giúp đỡ .