Tìm phần tử Fibonacci thứ n bài toán Fibonacci ần tử Fibonacci thứ n bài toán Fibonacci ử Fibonacci thứ n bài toán Fibonacci ứng với Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy
Trang 1Hàm đ quyệ quy
Hàm đ quy là nh ng hàm g i l i chính nó Nó h u d ng trong các tác vệ quy ững hàm gọi lại chính nó Nó hữu dụng trong các tác vụ ọi lại chính nó Nó hữu dụng trong các tác vụ ại chính nó Nó hữu dụng trong các tác vụ ững hàm gọi lại chính nó Nó hữu dụng trong các tác vụ ụng trong các tác vụ ụng trong các tác vụ
nh s p x p ho c tính toán các s giai th a… Hàm đ quy tếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ố giai thừa… Hàm đệ quy tương ứng với ừa… Hàm đệ quy tương ứng với ệ quy ơng ứng vớing ng v iứng với ớikhái ni m quy n p trong toán h c ệ quy ại chính nó Nó hữu dụng trong các tác vụ ọi lại chính nó Nó hữu dụng trong các tác vụ
Bài t p 1 Tìm ph n t Fibonacci th n (bài toán Fibonacci)ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ứng với
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tìm ph n t Fibonacci th n đần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ứng với ợc định nghĩa đệ quyc đ nh nghĩa đ quyịnh nghĩa đệ quy ệ quy
Trang 2Bài t p 2 Tính X lũy th a nập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ừa… Hàm đệ quy tương ứng với
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tính X mũ n v i X là s th c, n là s nguyên:ới ố giai thừa… Hàm đệ quy tương ứng với ực, n là số nguyên: ố giai thừa… Hàm đệ quy tương ứng vớiCài đ t:ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
/*Ham tra ve so thuc tinh gia tri X^n*/
float Power(float X, int n) {
Trang 3Bài t p 3 Thu t toán Euclide tìm ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ớic chung l n nh tới ất
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tìm ớic chung l n nh t c a 2 s nguyên dới ất ủa 2 số nguyên dương a, b ố giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing a, b
b ng thu t toán Euclide đằng thuật toán Euclide được định nghĩa đệ quy như sau: ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quyc đ nh nghĩa đ quy nh sau:ịnh nghĩa đệ quy ệ quy
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
Trang 4Bài t p 4 Tìm ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ớic chung l n nh t c a n s nguyênới ất ủa 2 số nguyên dương a, b ố giai thừa… Hàm đệ quy tương ứng với
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tìm ớic chung l n nh t c a n s nguyên dới ất ủa 2 số nguyên dương a, b ố giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing 0 1 , , n
a a đ ợc định nghĩa đệ quyc đ nh nghĩa đ quy nh sau:ịnh nghĩa đệ quy ệ quy
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
/*Ham tra ve uoc chung lon nhat cua a va b*/
int UCLN(int a, int b) {
Trang 5cout<<"Nhap vao "<<n<<" phan tu\n";
for(int i=0; i<n ; i++){
Trang 6Bài t p 5 Tính n giai th aập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ừa… Hàm đệ quy tương ứng với
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tính n! đ ợc định nghĩa đệ quyc đ nh nghĩa đ quy nh sau:ịnh nghĩa đệ quy ệ quy
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
/*Ham tra ve so nguyen tinh n! (Factorial)*/
long int Fac(int n) {
Trang 7Bài t p 6 T h p ch p k c a n ph n tập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ổ hợp chập k của n phần tử ợc định nghĩa đệ quy ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ủa 2 số nguyên dương a, b ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tính t h p ch p k c a n đổ hợp chập k của n phần tử ợc định nghĩa đệ quy ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ủa 2 số nguyên dương a, b ợc định nghĩa đệ quyc xác đ nh nh sau:ịnh nghĩa đệ quy
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
Trang 8}
Bài t p 7 Tính t ng n ph n t trong danh sáchập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ổ hợp chập k của n phần tử ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tính t ng n ph n t a0, a1 , , an đổ hợp chập k của n phần tử ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quyc đ nh nghĩa định nghĩa đệ quy ệ quyquy nh sau:
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
/*Ham tra ve so nguyen tinh tong n phan tu trong mang a*/
long int S(int a[], int n) {
Trang 9a = new int[n];
cout<<"Nhap vao "<<n<<" phan tu\n";
for(int i=0; i<n ; i++){
Bài t p 8 Đ quy h tập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ệ quy ỗ tương ơng ứng vớing
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tính n X và n Y đ ợc định nghĩa đệ quyc xác đ nh nh sau:ịnh nghĩa đệ quy
[ Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
long int Y(int n);
long int X(int n) {
Trang 10long int Y(int n) {
Bài t p 9 Tích n ph n t trong danh sáchập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
Vi t chếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ơng ứng vớing trình tính tích n ph n t 0 1 , , n a a đần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quyc đ nh nghĩa đ quyịnh nghĩa đệ quy ệ quy
Trang 11long int S(int a[], int n) {
cout<<"Nhap vao "<<n<<" phan tu\n";
for(int i=0; i<n ; i++){
Trang 12[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
cout<<"Nhap vao danh sach "<<n<<" phan tu\n";
for(int i=0; i<n ; i++){
cout<<"a["<<i<<"] = ";
Trang 13Bài t p 11 Li t kê t t c dãy nh phân đ dài kập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ệ quy ất ả dãy nhị phân độ dài k ịnh nghĩa đệ quy ộ dài k
Ch nh h p l p ch p k c a n ph n t là m t nhóm có th t g m k ph n tợc định nghĩa đệ quy ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ủa 2 số nguyên dương a, b ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ộ dài k ứng với ực, n là số nguyên: ồm k phần tử ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
l y t n ph n t đã cho, trong đó m i ph n t có th có m t 1, 2, …, k l nần tử đã cho, trong đó mỗi phần tử có thể có mặt 1, 2, …, k lần ử đã cho, trong đó mỗi phần tử có thể có mặt 1, 2, …, k lần ỗi phần tử có thể có mặt 1, 2, …, k lần ần tử đã cho, trong đó mỗi phần tử có thể có mặt 1, 2, …, k lần ử đã cho, trong đó mỗi phần tử có thể có mặt 1, 2, …, k lần ể có mặt 1, 2, …, k lần ặt 1, 2, …, k lần ần tử đã cho, trong đó mỗi phần tử có thể có mặt 1, 2, …, k lầntrong nhóm t o thành.ại chính nó Nó hữu dụng trong các tác vụ
Ph ơng ứng vớing pháp: ta li t kê t t c ch nh h p có l p ch p k c a hai ph n t 0ệ quy ất ả dãy nhị phân độ dài k ợc định nghĩa đệ quy ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ủa 2 số nguyên dương a, b ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
và 1 Khi đó ta sẽ có t t c dãy nh phân có đ dài k.ả dãy nhị phân có độ dài k ị phân có độ dài k ộ dài k
Ví d : minh h a d ng cây v i k = 3.ụng trong các tác vụ ọi lại chính nó Nó hữu dụng trong các tác vụ ại chính nó Nó hữu dụng trong các tác vụ ới
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
Trang 15Bài t p 12 Ch nh h p không l p ch p k c a n ph n tập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quy ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ủa 2 số nguyên dương a, b ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
Ch nh h p ch p k c a n ph n t là m t nhóm có th t g m k ph n tợc định nghĩa đệ quy ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ủa 2 số nguyên dương a, b ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ộ dài k ứng với ực, n là số nguyên: ồm k phần tử ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)khác nhau đ ợc định nghĩa đệ quyc ch n t n ph n t đã cho.ọi lại chính nó Nó hữu dụng trong các tác vụ ừa… Hàm đệ quy tương ứng với ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
Ph ơng ứng vớing pháp: li t kê dãy có đ dài k và các ph n t trong dãy đệ quy ộ dài k ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quy ất ừa… Hàm đệ quy tương ứng vớic l y t
t p h p {0,1, … , n-1} các ph n t đập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quy ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quyc đ a vào dãy không đ ợc định nghĩa đệ quyc phéptrùng nhau
Ví d : n = 3 và k = 2 ta sẽ có các dãy con {0,1}, {0,2}, {1,0}, {1,2}, {2,0} vàụng trong các tác vụ{2,1}
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
#define max 20
Trang 17for(int j = 0; j<n; j++)
if(DanhDau[j] == 0) { //neu dinh j chua duoc chonDanhDau[j] = 1; //chon dinh j
Luu[i] = j; //luu lai gia tri j
Try(i+1); //tim phan tu tiep theo
DanhDau[j] = 0; //phuc hoi dinh j
Trang 18Bài t p 13 Hoán v m ng s nguyên có n ph n tập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ịnh nghĩa đệ quy ả dãy nhị phân độ dài k ố giai thừa… Hàm đệ quy tương ứng với ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci)
Ph ơng ứng vớing pháp: t ơng ứng vớing t phực, n là số nguyên: ơng ứng vớing pháp làm bài t p 13 nh ng đây ta thayập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ở đây ta thay
t p h p {0, 1, … , n-1} là t p h p giá tr n ph n t c a m ng và đ dài c aập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quy ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ợc định nghĩa đệ quy ịnh nghĩa đệ quy ần tử Fibonacci thứ n (bài toán Fibonacci) ử Fibonacci thứ n (bài toán Fibonacci) ủa 2 số nguyên dương a, b ả dãy nhị phân độ dài k ộ dài k ủa 2 số nguyên dương a, bdãy là n
Ví d : n = 3 và A = {-1,0,1} ta sẽ có các dãy con tụng trong các tác vụ ơng ứng vớing ng là {-1,0}, {-1,1},ứng với{0,-1}, {0,1}, {1,-1} và {1,0}
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
#define max 20
char DanhDau[max]; //mang danh dau dinh duoc chon
int Luu[max], A[max], n;
/*Khoi tao cac bien*/
void Init() {
cout<<"Nhap n = ";
Trang 19for(int i = 0; i<n; i++) {
/*Danh dau vi tri i chua chon*/
Luu[i] = A[j]; //luu lai gia tri dinh duoc chon
Try(i+1); //tim dinh tiep theo
Trang 20DanhDau[j] = 0; //phuc hoi dinh j
Trang 21}
Bài t p 14 Đ t n quân h u trên bàn c vuaập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ờ vua
Mô t bài toán: li t kê t t c phả dãy nhị phân độ dài k ệ quy ất ả dãy nhị phân độ dài k ơng ứng vớing án đ t n quân h u trên bàn c vuaặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ờ vua
c p nxn sao cho n quân h u không đ c phép ăn nhau.ậu không được phép ăn nhau ược phép ăn nhau
Ví d : cho bàn c vua c p 8x8 Dụng trong các tác vụ ờ vua ất ớii đây là 1 ph ơng ứng vớing án đ t quân h u:ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci)
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <conio.h>
#include <iostream.h>
#define max 20
char a[max]; //danh dau cot
char b[2*max-1]; //danh dau huong Dong-Bac
char c[2*max-1]; //danh dau huong Tay-Bac
int Luu[max]; //luu ket qua tim duoc
//tat ca cac cot chua duoc chon
for(int i = 0; i<n; i++)
a[i] = 0;
Trang 22//tat ca cac huong chua duoc chon
for( i = 0; i<2*n-1; i++) {
Try(i+1); //tim vi tri dat hau tiep theo
Trang 23a[j] = 0; //phuc hoi cot j
b[i+j] = 0; //phuc hoi huong Dong-Bac thu i+j
c[i-j+n] = 0; //phuc hoi huong tay-Bac thu j-i+n
Bài t p 15 Mã đi tu nập 1 Tìm phần tử Fibonacci thứ n (bài toán Fibonacci) ần tử Fibonacci thứ n (bài toán Fibonacci)
Mô t bài toán: đ t quân mã t i ô có v trí (x,y) trên bàn c vua c p nx n.ả dãy nhị phân độ dài k ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ại chính nó Nó hữu dụng trong các tác vụ ịnh nghĩa đệ quy ờ vua ấtHãy li t kê t t c các phệ quy ất ả dãy nhị phân độ dài k ơng ứng vớing án quân mã xu t phát t i v trí (x,y) có thất ại chính nó Nó hữu dụng trong các tác vụ ịnh nghĩa đệ quy ể viết lại theo cách như sau:
nh y đ n t t c các ô khác trên bàn c v i đi u ki n m i ô quân mã chả dãy nhị phân độ dài k ếp hoặc tính toán các số giai thừa… Hàm đệ quy tương ứng với ất ả dãy nhị phân độ dài k ờ vua ới ều kiện mỗi ô quân mã chỉ ệ quy ỗ tương
đ ợc định nghĩa đệ quyc phép đi qua đúng 1 l n.ần tử Fibonacci thứ n (bài toán Fibonacci)
Ví d : cho bàn c vua c p 8x8 Ta có 2 phụng trong các tác vụ ờ vua ất ơng ứng vớing án đ t quân mã nh sau:ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
[Cài đ t:]ặc tính toán các số giai thừa… Hàm đệ quy tương ứng với
#include <iostream.h>
#include <conio.h>
Trang 24#define max 10
int A[max][max]; //Mang danh dau
int B[max][max]; //Mang luu duong di
Trang 25B[x1][y1] = i; //luu lai duong di
x = x1; //lay toa do x moi
y = y1; //lay toa do y moi
Try(i+1); //tim duong di tiep theo
A[x1][y1] = 0; //phuc hoi o (i,j)
B[x1][y1] = 0; //xem nhu o chua di qua
x = x1 - X[j]; //phuc hoi dinh x
Trang 26y = y1 - Y[j]; //phuc hoi dinh y