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»
Bấm ngay Subscribe / Đăng Ký xem video hay mới nhất >>

Video được xem nhiều nhất

Quyết chiến giữa mòng biển và bạch tuộc giữa biển khơi
00:00 / --:--

Video nổi bật

TIN Công Nghệ NỔI BẬT

iPhone 6 và iPhone 6s lỗi bộ nhớ, cách khắc phục

Nhiều người dùng iPhone 6s gần đây đã phàn nàn về bộ nhớ trống trên chiếc iPhone của mình. Tình trạng này không xuất hiện trên phiên bản 16 GB, mà những người sở hữu bản iPhone 6/6s 64 GB và 128 GB. Theo phản ánh thì không gian lưu trữ trên điện thoại của họ tự nhiên bị biến mất đầy bí ẩn.

Nhìn lại năm 2015 (Phần 1): Những cánh chim đầu đàn trong làng smartphone

Đây là thời điểm mà mọi thăng trầm trong năm 2015 của các hãng công nghệ đều đã có thể cân đong đo đếm cụ thể. Trước khi chờ đón những điều tuyệt vời ở năm 2016 thì chúng ta hãy cùng xem lại với những nỗ lực của mình, họ đã tạo được dấu ấn gì đáng nhớ trong năm vừa qua.

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 đề 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
Xem tiếp: Công Nghệ


  • Thoi su 24h2605 Nhung an mang rung ron trong con mong du
    Thời sự 24h(26/05): Những án mạng rùng rợn trong cơn mộng du

    Cháu gái ngã xuống hồ đang xả nước, ông tử nạn khi lao theo cứu cháu; Uẩn khúc khám bệnh nhận quà khuyến mãi ở phòng khám tư nhân; Mảnh giấy sót lộ tẩy chiêu đóng giả người thân đoạt tiền người già; Giảm hóa đơn nước tiền triệu cho dân: Tình thương ngành nước

  • Thoi su 24h2505 Cong tu cuong buc nhieu co gai tren oto
    Thời sự 24h(25/05): Công tử cưỡng bức nhiều cô gái trên ôtô

    Bị "tố" từ chối cấp cứu bệnh nhân, bác sĩ trạm y tế nói gì?; Hà Nội ngập nặng, dân leo lên xe ủi, chèo xuồng "lướt" phố; Vợ tố bị chồng đánh đến mức phải nhập viện, sảy thai 3 tháng; Vụ tai nạn thảm khốc ở Bình Thuận: Đã có 13 nạn nhân tử vong; Đã giải cứu thành công cá voi nặng 15 tấn mắc cạn

  • Thoi su 24h2405 Loi khai cua hung thu sat hai be gai 11T
    Thời sự 24h(24/05): Lời khai của hung thủ sát hại bé gái 11T

    Chết cháy vì không có búa thoát hiểm: Nhà xe kêu khách lấy trộm; Những lần ông Obama tháo nhẫn để bắt tay gây tranh cãi; Hà Nội tiếp tục kiểm tra hoạt động bán hàng đa cấp; Cứu sống bệnh nhân bị gần 20 viên đạn găm khắp người; Cần xử lý thông tin bịa đặt, vu khống trên mạng xã hội

  • Thoi su 24h2305 Tai nan tham khoc o Binh Thuan 12 nguoi chet
    Thời sự 24h(23/05): Tai nạn thảm khốc ở Bình Thuận 12 người chết

    Chuyện những "dân chơi" đặt mua đồ nhưng thản nhiên... quên trả tiền; Vụ tai nạn thảm khốc 12 người chết: Tang thương quê nghèo; Truy sát kinh hoàng ở Cà Mau, nạn nhân bị chém khâu gần 30 mũi; Bê tông hầm chui như "kẹo lạc không đường": Nhiều giả thiết;

  • Thoi su 24h1905 Ghen tuong phi cong tre danh chet ban gai
    Thời sự 24h(19/05): Ghen tuông phi công trẻ đánh chết bạn gái

    Gạo đổi màu xanh khi ngâm nước tại Đà Nẵng: Mất 15 ngày kiểm tra; Xúc xích chứa chất gây ung thư: "Ăn ít cơ thể tự đào thải độc"; Dùng axit tẩy bình rồi đem bán nước lọc đóng chai; Góc khuất đằng sau lời "rao mình" trong "ma trận"... chợ thận online;

  • Tai nan kinh hoang o Binh Thuan
    Tai nạn kinh hoàng ở Bình Thuận

    Những vụ tai nạn liên quan đến xe khách thường gây ra thương vong lên đến hàng chục người khiến nhiều người thấy bất an, ám ảnh đối với loại phương tiện này.

  • Chuyen tham Viet Nam cua Tong thong Obama
    Chuyến thăm Việt Nam của Tổng thống Obama

    Nhà Trắng công bố lịch trình chuyến thăm chính thức tới Việt Nam và Nhật Bản của Tổng thống Barack Obama, chuyến thăm thứ 10 của ông tới châu Á.

  • Phong chong xam hai tinh duc tre em
    Phòng chống xâm hại tình dục trẻ em

    Từ đầu năm đến nay, hàng loạt vụ học sinh bị xâm hại tình dục khiến nhiều phụ huynh, học sinh hoang mang, lo sợ

  • Toan canh vu Dong phuc bien hieu
    Toàn cảnh vụ 'Đồng phục biển hiệu'

    Việc đồng bộ bảng, biển quảng cáo đã mang lại diện mạo khác hẳn với vẻ nhếch nhác của nhiều tuyến phố ở Hà Nội hay các đô thị lớn. Tuy nhiên, có không ít ý kiến không đồng tình với việc làm này.

  • Nu sinh tat ban 52 cai chay mau mui
    Nữ sinh tát bạn 52 cái, chảy máu mũi

    Một vụ bạo lực học đường nghiêm trọng đã xảy ra tại trường THCS 15/10 (Mộc Châu, Sơn La), trong đó một nữ sinh đã thẳng tay tát bạn 52 cái, hộc máu mũi đang thu hút sự quan tâm của dư luận.

  • Nghin le chuyen tuan qua 1505 21052016
    Nghìn lẻ chuyện tuần qua 15/05 - 21/05/2016

    Bố vợ chém chết con rể rồi chở xác đến Công an đầu thú; Ông Tây dọn cống thối ở Nguyễn Khang, Hà Nội; Choáng với hóa đơn tiền nước khủng ở Hà Nội; Cá chết ngửa bụng trên kênh Nhiêu Lộc ... là những tin tức xã hội nổi bật được dư luận quan tâm trong tuần qua.

  • Toan canh kinh te tuan 1505 21052016
    Toàn cảnh kinh tế tuần 15/05 - 21/05/2016

    Giá xăng tăng lần thứ tư liên tiếp, huy động 500 tấn vàng trong dân, tính thêm các khoản chi đám hiếu, hỷ vào phí sản xuất điện, tiết kiệm người Việt vẫn đứng đầu thế giới,... Cùng với các tin tức 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ần qua.

  • Su kien quoc te noi bat 155215
    Sự kiện quốc tế nổi bật (15/5-21/5)

    Tướng Mỹ tuyên bố tiếp tục tuần tra Biển Đông thách thức Trung Quốc; chiến đấu cơ Trung Quốc chặn máy bay Mỹ trên Biển Đông; Mỹ thông báo lịch trình thăm Việt Nam của Tổng thống Obama... là những tin chính trong tuần qua.

  • Ban tin Suc khoe tuan qua 155215
    Bản tin Sức khỏe tuần qua (15/5-21/5)

    Bệnh sốt vàng da cực nguy hiểm: Đang có nguy cơ tràn vào Việt Nam; Chuyện lạ Cà Mau: Ồ ạt đi khám bệnh để... nhận quà; Chồng 96 tuổi vợ vẫn phải đặt vòng vì sợ mang bầu; Nguy cơ tiềm ẩn sau những món ăn ngày hè của người Việt;... là những thông tin Sức khỏe được quan tâm nhất tuần qua.

  • Tin An ninh Phap luat tuan qua 1505 2105
    Tin An ninh - Pháp luật tuần qua (15/05 - 21/05)

    Bé gái 11 tuổi bị sát hại giữa sân nhà; Cha chém con rể rồi chở xác đi đầu thú; Những vụ bác sĩ lợi dụng thuốc mê để hãm hiếp bệnh nhân; Minh Béo bị bắt tại Mỹ: Những khoản chi khủng cho vụ án; Cả làng đánh ghen... hộ: Nhiều người đang "cổ súy" cho việc ngoại tình;....là những tin đáng chú ý.