1. Trang chủ
  2. » Công Nghệ Thông Tin

thuật toán đệ quy và một số bài toán đệ quy cơ bản

26 826 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 17,67 KB

Nội dung

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 1

Hà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 2

Bà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 3

Bà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 4

Bà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 5

cout<<"Nhap vao "<<n<<" phan tu\n";

for(int i=0; i<n ; i++){

Trang 6

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

Bà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 9

a = 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 10

long 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 11

long 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 13

Bà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 15

Bà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 17

for(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 18

Bà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 19

for(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 20

DanhDau[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 23

a[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 25

B[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 26

y = y1 - Y[j]; //phuc hoi dinh y

Ngày đăng: 17/10/2014, 07:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w