vietbao

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

Bấm ngay Subscribe / Đăng Ký xem video hay mới nhất >>

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»
Drift lùi xe chuyên chở tổng thống Mỹ cực siêu đẳng
Comment :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 đề 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:.
Dùng công nghệ cũ, các hãng hàng không sẽ còn gặp nhiều sự cố

Theo các chuyên gia hàng không, các hãng hàng không có thể còn gặp nhiều sự cố tương tự hãng Delta mới đây bởi không đầu tư đủ để cải tổ hệ thống đặt chỗ vốn đang sử dụng các công nghệ từ những năm 1960.

Top 9 ứng dụng Android chỉnh sửa ảnh tốt nhất
Top 9 ứng dụng Android chỉnh sửa ảnh tốt nhất

Càng ngày smartphone càng được cải tiến để thay thế máy ảnh. Các nhà phát triển cũng tận dụng cơ hội để cung cấp các ứng dụng chỉnh sửa ảnh trực quan và hiệu quả. Sau đây là 9 lựa chọn tốt nhất dành cho bạn… (ứng dụng, Android, chỉnh sửa ảnh)

  • Thoi su 24h258 Hanh ha con roi chup hinh gui cho vo
    Thời sự 24h(25/8): Hành hạ con rồi chụp hình gửi cho vợ

    Đi tìm lời giải cho cây chuối lạ cao 15 cm ra 6 bắp ở Huế; Những vụ tự sát thương mình và người thân để trục lợi bảo hiểm nổi tiếng; Quan Formosa xin rút kinh nghiệm, người Việt hào phóng bao dung; Hà Nội: Một tuần xử lý gần 200 ‘ma men’, người vi phạm bất ngờ; Xử phạt nồng độ cồn, nhân viên quán bia "mật báo" cho khách

  • Thoi su 24h248 Chat xac nguoi tinh bo bao tai o Sai Gon
    Thời sự 24h(24/8): Chặt xác người tình bỏ bao tải ở Sài Gòn

    Cứu một cụ bà trong đám cháy, thiếu úy CSGT nhập viện cùng nạn nhân; Cắt điện, nước của quán cà phê Xin Chào là sai quy định; Nhiều phi công xác nhận bị chiếu đèn laser khi hạ cánh xuống Tân Sơn Nhất; Sập hầm vàng ở Lào Cai: công bố danh tính 7 công nhân bị chết; Ẩn tình vụ vợ U60 thuê người đánh sảy thai cô giúp việc 19 tuổi

  • Thoi su 24h238 Gai tre thue chat chan tay truc loi
    Thời sự 24h(23/8): Gái trẻ thuê chặt chân tay trục lợi

    Xé áo, cắt tóc nhân tình ở phố: Nhân tình là "osin" của kẻ chủ mưu; Giám định ADN để nhận dạng 150 ngôi mộ bị xâm phạm; Vụ "tháp nghiêng" chờ sập: 3/4 hộ dân đã di dời; Dân không có quyền kiểm tra CSGT': Giám sát khác kiểm tra; Bạn gái trễ giờ lên máy bay, nam thanh niên xông vào đánh nhân viên hàng không

  • Nhung thong tin dang doc nhat trong tuan tu 2182782016
    Những thông tin đáng đọc nhất trong tuần (từ 21/8-27/8/2016)

    Vụ rơi máy bay quân sự làm một học viên phi công tử vong, tự thuê người chặt chân, tay mình để trục lợi bảo hiểm, đau đáu lòng ngư dân miền Trung câu hỏi bao giờ cá biển ăn được, hay vụ sập mỏ vàng ở Lào Cai đoạt mạng 7 người,... là những tin nóng được quan tâm nhất tuần qua.

  • Toan canh kinh te tuan 2108 27082016
    Toàn cảnh kinh tế tuần (21/08 - 27/08/2016)

    Tiền ở một loạt các ngân hàng lại "bốc hơi", vấn nạn thực phẩm bẩn bủa vây người Việt, áp lực thu ngân sách khiến giá xăng dầu tăng, những băn khoăn về việc mua điện từ Lào, CPI tháng 8 tăng 0,1% so tháng trướ ... Cùng với những thông tin về tài chính- ngân hàng, bất động sản, thị trường tiêu dùng..là những tin tức - sự kiện kinh tế nổi bật tuầ

  • Tong hop tin An ninh phap luat tuan 142082016
    Tổng hợp tin An ninh - pháp luật tuần (14-20/8/2016)

    Như một gáo nước lạnh tạt vào mặt khi dư luận còn đang bàng hoàng trước thảm án Lào Cai. Trọng án Yên Bái, 3 nạn nhân là những người đứng đầu cơ quan lãnh đạo tỉnh. Thảm án Hà Giang, mẹ giết 3 con ruột vì mâu thuẫn với chồng. Giết mẹ vợ và em vợ ở Thái Bình.Những vụ án như một chuỗi sự kiện tiếp diễn xảy ra trong một thời gian ngắn. Có thể nói tuần này là t