Thứ tư, 28 Tháng mười một 2001, 11:17 GMT+7

Tự học C++: Đệ quy

Các hàm có thể gọi chính nó. Điều này có thể có ích với một số tác vụ như là một số phương pháp sắp xếp hay tính giai thừa của một số. Ví dụ, để tính giai thừa của một số (n), công thức toán học của nó như sau:

n! = n * (n-1) * (n-2) * (n-3) ... * 1

và một hàm đệ quy để tính toán sẽ như sau:

// factorial calculator

#include

long factorial (long a)

{

if (a > 1)

return (a * factorial (a-1));

else

return (1);

}

int main ()

{

long l;

cout << "Type a number: ";

cin >> l;

cout << "!" << l << " = " << factorial (l);

return 0;

}
Type a number: 9
!9 = 362880

Chú ý trong hàm factorial chúng ta có thể lệnh gọi chính nó nhưng chỉ khi tham số lớn hơn 1, nếu không thì hàm sẽ thực hiện một vòng lặp vô hạn vì sau khi đến 0 nó sẽ tiếp tục nhân cả những số âm.

Hàm này có một hạn chế là kiểu dữ liệu mà nó dùng (long) không cho phép tính giai thừa quá 12!.

Khai báo mẫu cho hàm.

Cho đến giờ chúng ta hoàn toàn phải định nghĩa hàm trước lệnh gọi đầu tiên đến nó, mà thường là trong main, vì vậy hàm main luôn phải nằm cuối chương trình. Nếu bạn thử lặp lại một vài ví dụ về hàm trước đây nhưng thử đặt hàm main trước bất kì một hàm được gọi từ nó, bạn gần như chắc chắn sẽ nhận được thông báo lỗi. Nguyên nhân là một hàm phải được khai báo trước khi nó được gọi như những gì chúng ta đã làm trong tất cả các ví dụ.

Nhưng có một cách khác để tránh phải viết tất cả mã chương trình trước khi chúng có thể được dùng trong main hay bất kì một hàm nào khác. Đó chính là khai báo mẫu cho hàm. Cách này bao gồm việc khai báo hàm một cách ngắn gọn nhưng đủ để cho trình dịch có thể biết các tham số và kiểu dữ liệu trả về của hàm.

Dạng của nó như sau:

type name ( argument_type1, argument_type2, ...);

Đây chính là phần đầu của định nghĩa hàm, ngoại trừ:

  • Nó không có bất kì lệnh nào cho hàm. Điều này có nghĩa là nó không bao gồm thân hàm với tất cả các lệnh thường được bọc trong cặp ngoặc nhọn { }.
  • Nó kết thúc bằng dấu chấm phẩy (;).
  • Trong phần liệt kê các tham số chỉ cần viết kiểu của chúng là đủ. Việc viết tên của các tham số trong phần khai báo mẫu là không bắt buộc.

Ví dụ:

// prototyping

#include

void odd (int a);

void even (int a);

int main ()

{

int i;

do {

cout << "Type a number: (0 to exit)";

cin >> i;

odd (i);

} while (i!=0);

return 0;

}

void odd (int a)

{

if ((a%2)!=0) cout << "Number is odd. ";

else even (a);

}

void even (int a)

{

if ((a%2)==0) cout << "Number is even. ";

else odd (a);

}
Type a number (0 to exit): 9
Number is odd.
Type a number (0 to exit): 6
Number is even.
Type a number (0 to exit): 1030
Number is even.
Type a number (0 to exit): 0
Number is even.

Ví dụ này rõ ràng không phải là một ví dụ về sự hiệu quả. Tôi chắc chắn rằng các bạn có thể nhận được kết quả như trên chỉ với một nửa số dòng lệnh. Tuy nhiên nó giúp cho chúng ta thấy được việc khai báo mẫu các hàm là như thế nào. Hơn nữa, trong ví dụ này việc khai báo mẫu ít nhất một hàm là bắt buộc.

Đầu tiên chúng ta thấy khai báo mẫu của hai hàm oddeven:

void odd (int a);
void even (int a);

cho phép hai hàm này có thể được sử dụng trước khi chúng được định nghĩa hoàn chỉnh. Tuy nhiên lý do đặc biệt giải thích tại sao chương trình này lại cần ít nhất một hàm phải được khi báo mẫu là trong odd có một lời gọi đến even và trong even có một lời gọi đến odd. Vì vậy nếu không có hàm nào được khai báo trước thì lỗi chắc chắn sẽ xảy ra.

Rất nhiều lập trình viên kinh nghiệm khuyên rằng tất cảcác hàm nên được khai báo mẫu. Đó cũng là lời khuyên của tôi, nhất là trong trường hợp có nhiều hàm hoặc chúng rất dài, khi đó việc khai báo tất cả các hàm ở cùng một chỗ cho phép chúng ta biết phải gọi các hàm như thế nào, vì vậy tiết kiệm được thời gian.

(Theo OurViet Netwok)

Phần sau: Mảng

Theo dòng sự kiện:
Tự học C++: Mảng (05/12/2001)
Giá trị mặc định của tham số (22/11/2001)
Tự học C++: Truyền tham số theo tham số giá trị hay tham số biến (20/11/2001)
Tự học C++: Cách sử dụng void (13/11/2001)
Tự học C++: Hàm (07/11/2001)
Xem tiếp»
Chủ đề liên quan

Nhận xét tin Tự học C++: Đệ quy

Ý kiến bạn đọc

Viết phản hồi

Bạn có thể gửi nhận xét, góp ý hay liên hệ về bài viết Tự học C++: Đệ quy bằng cách gửi thư điện tử tới Lien He Bao Viet Nam. Xin bao gồm tên bài viết Tu hoc C De quy ở dạng tiếng Việt không dấu. Hoặc Tự học C++: Đệ quy ở dạng có dấu. Bài viết trong chuyên đề Kinh Nghiệm của chuyên mục Công Nghệ.

study C + +: Recursive
a, declared, possibly, self-study , parameters, factorial, function, call, Int, Odd, computer

The function can call itself. This can be useful for some tasks as a method or factorial arrangement of a number. For example, to compute the factorial of a number (n), its mathematical formula as follows:.

CÓ THỂ BẠN QUAN TÂM




  • Su kien quoc te noi bat 248 den 308
    Sự kiện quốc tế nổi bật (24-8 đến 30-8)

    Israel – Palestine đạt được thỏa thuận ngừng bắn dài hạn, Mỹ hợp tác với Syria để chống phiến quân tự xưng là Nhà nước Hồi giáo (IS), cuộc gặp giữa Tổng thống Nga Vladimir Putin và Tổng thống Ukcraine Petro Poroshenko không có tiến triển nào đáng kể... là những tin đáng chú ý trong tuần qua.

  • Nghin le chuyen tuan qua 2408 3008
    Nghìn lẻ chuyện tuần qua (24/08 - 30/08)

    4.000 tỷ đồng "số hóa" SGK: Nghi vấn trục lợi từ máy tính bảng; Sư tử TQ canh di tích: Tha hóa về biểu trưng văn hóa! ; Phó phòng Bộ Công Thương nhận tiền "lót tay" công khai.... là những tin tức nổi bật được dư luận quan tâm trong tuần qua (24/08 - 30/08)

  • Toan canh Showbiz tuan 2408 3008
    Toàn cảnh Showbiz tuần (24/08 – 30/08)

    Siêu mẫu Thanh Hằng bị tố vô cảm sau khi gây tai nạn, Hương Tràm lộ nội y phản cảm, Khánh Ly công bố thủ bút tác quyền của Trịnh Công Sơn, An Nguy bất ngờ viết tâm thư gửi Toàn Shinoda, Những hình ảnh ấn tượng tại lễ trao giải MTV Music Video Awards 2014, Mỹ nam xứ Hàn Kim Hyun Joong hành hung bạn gái, Brad Pitt và Angeline Jolie đã bí mật làm đám cưới ở Pháp,...là những thông tin giải trí nổi bật trong tuần qua.

  • Tin An ninh Phap luat tuan qua 2408 3008
    Tin An ninh - Pháp luật tuần qua ( 24/08 - 30/08)

    Hàng loạt thanh niên tự hại đời vì “yêu” trẻ con; Vụ án Cát Tường – chuyện bây giờ mới kể; Những tình huống bi hài “khó đỡ” tại chốt 141; Chuyện chưa kể về cuộc vây bắt ông trùm Minh “Sâm” và đồng bọn; Những thói quen kỳ lạ của hung thủ tố cáo tội ác; .......là những tin đáng chú ý trong tuần.

  • Tong hop Doi song tuan qua 258 318
    Tổng hợp Đời sống tuần qua (25/8 - 31/8)

    Không khí của mùa Trung thu đã lan tỏa đến khắp mọi nơi, nhiều bài viết hay về Trung thu, những cách làm bánh trung thu hữu ích. Rất nhiều những câu chuyện gia đình ý nghĩa, và những câu chuyện cảm động có thật trong cuộc sống; Bố mẹ chôn sống, đánh đập con là tin nuôi dạy con gây chấn động; Tin thực phẩm bẩn, và nhiều câu chuyện đáng suy ngẫm khác...