Tính đệ quy của chương trình con

Một phần của tài liệu Giao an tin học 8 Pascal (Trang 58 - 61)

III/ Một số đặc tính của chương trình con

4. Tính đệ quy của chương trình con

Đệ quy là một khái niệm cơ bản trong toán học và khoa học máy tính. Định nghĩa đơn giản của một chương trình đệ quy là chương trình mà gọi đến chính nó (và một hàm đệ quy là một hàm được định nghĩa dựa trên chính nó). Một chương trình đệ quy thì không thể gọi đến chính nó mãi mãi (và một hàm đệ quy không thể lúc nào cũng định nghĩa dựa vào chính nó trừ khi định nghĩa bị xoay vòng). Một điều kiện cần thiết là phải có điều kiện kết thúc khi chương trình không gọi đến chính nó nữa (và khi hàm không được định nghĩa dựa trên chính nó). Tất cả các tính toán trong thực tế đều có thể diễn đạt bằng khuôn mẫu đệ quy.

Ví dụ 1:

Bạn xem hàm giai thừa, nó được định nghĩa bởi công thức: N! = N * (N-1)! với N>=1 và 0! = 1.

Hàm này tương ứng với chương trình đệ quy như sau:

FuncTion Giaithua(N : integer) : integer; Begin

if N = 0 then Giaithua:= 1 else

Giaithua := N * Giaithua(N - 1); End;

 Nó gọi đến chính nó (với một giá trị đối số nhỏ hơn) và nó có điều kiện kết thúc khi tính kết quả trực tiếp của nó.

Ví dụ 2:

Tính dãy Fibonacci:

Fn = Fn-1 + Fn-2 với n = 2 và F0 = F1 = 1 Quan hệ này định nghĩa dãy

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, … Số sau bằng hai số trước cộng lại. Số sau bằng hai số trước cộng lại.

Chúng ta có chương trình đệ quy

Function Fibonacci(n: integer) : integer; Begin

if n<=1 then Fibonacci := 1 else

Fibonacci := Fibonacci(n – 1) + Fibonacci(n – 2); End;

TÓM LƯỢC

Chương trình con là một đoạn chương trình, các câu lệnh của chúng được bao giữa cặp từ khoá

Begin … End; Chúng ta có thể gọi một hoặc nhiều lần trong chương trình qua tên của chương trình con đó.

 Chương trình con có hai dạng, đó là Procedure hoặc Function.

 Các khai báo trong chương trình con cũng khá giống như chương trình chính, trong chương trình con phải có dạng Procedure hoặc Function, sau đó là đến tên của chương trình con, tiếp theo là các tham số được bao trong dấu ngoặc đơn, các tham số có thể có hoặc không và được cách nhau bởi dấu chấm phẩy.

 Hàm thì có sự trả về.

 Cần xác định nên dùng chương trình con là thủ tục hay hàm.  Cần chú ý đến cách gọi hàm và thủ tục trong chương trình chính.

 Các biến được khai báo sau từ khoá Var của chương trình chính được gọi là biến toàn cục, nó được biết trong toàn bộ chương trình, biến khai báo sau từ khoá Var của chương trình con gọi là biến địa phương nó không hề được biết đến trong chương trình chính.

 Khi gọi thì các tham số thực sẽ chuyển cho chương trình con tương ứng với các tham số hình thức theo thứ tự xuất hiện của chúng trong danh sách tham số.

 Tham trị Không đi sau từ khoá Var trong danh sách các tham số hình thức. Được cấp ô nhớ riêng khi chương trình con được gọi và bị xoá bỏ khi chương trình con thực hiện xong. Tham số thực tương ứng là một biểu thức. Tham trị thực chất là một biến cục bộ, khi chương trình con được gọi, tham trị sẽ nhận trị là trị của tham số thực, trước khi chương trình con bắt đầu thực hiện. Những thay đổi của tham trị không ảnh hưởng gì đến chương trình chính, nghĩa là không kéo theo sự thay đổi của tham số thực tương ứng.

 Tham biến đi sau tứ khoá Var trong danh sách các tham số.Tham số thực tương ứng phải là một biến.Những thay đổi trên tham biến thực chất là được thực hiện trên tham số thực tương ứng. Thực chất của sự truyền tham số đối với tham biến là sự truyền địa chỉ.

 Đệ quy là một khái niệm cơ bản trong toán học và khoa học máy tính. Định nghĩa đơn giản của một chương trình đệ quy là chương trình mà gọi đến chính nó (và một hàm đệ quy là một hàm được định nghĩa dựa trên chính nó).

PHẦN THỰC HÀNH:

1. Viết lại chương trình tính bốn phép toán cơ bản, cộng - trừ - nhân – chia bằng thủ tục và hàm. 2. Viết chương trình con kiểm tra xem số tự nhiên n có phải là số nguyên tố hay không?

3. Viết chương trình con kiểm tra xem trong mảng a[] có mặt phần tử x hay không?

4. Viết chương trình con cho biết số các phần tử dương, số các phần tử âm, số các phần tử 0 của một mảng số nguyên.

5. Cho hàm tính giai thừa như sau:

Function giaithua(m : integer) : Real; Var i : integer; gt : real; Begin gt := 1; For i:=1 to m do gt := gt * i; giaithua := gt; End;

Viết chương trình nhập vào một số nguyên dương và cho ra kết quả với chương trình con như trên.

Một phần của tài liệu Giao an tin học 8 Pascal (Trang 58 - 61)

Tải bản đầy đủ (DOC)

(69 trang)
w