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»
Xem tiếp chủ đề: Ngôn ngữ C

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

5 tính năng thú vị của ứng dụng photos trên iPhone

Cùng với sự ra đời của iOS 8, ứng dụng hình ảnh đã nhận được một vài thay đổi nhằm đáp ứng nhu cầu sử dụng ngày một cao của người dùng. Vậy đâu là những thay đổi quan trọng nhất? Các bạn có thể khám phá một vài tính năng thú vị của ứng dụng photos trên iPhone trong bài viết dưới đây

2 cách vào Google khi bị hack DNS

Nhóm hacker Lizardsquad tấn công DNS dẫn đến chuyện không thể truy cập vào Google Việt Nam sáng nay. Tạm thời, bạn có thể tự khắc phục sự cố này theo hai cách.

Có nên nâng cấp ipad air lên ipad air 2 không?

Năm ngoái, iPad Air là chiếc tablet khá hoàn hảo được người dùng rất ưa chuộng. Vì thế, những nâng cấp trên iPad Air 2 đang tạo ra rất nhiều tò mò cho người dùng. Nhưng thay đổi được Apple nhắc đến nhiều nhất là kiểu dáng mỏng và nhẹ hơn so với người tiền nhiệm, có cảm biến vân tay, camera sắc nét hơn, cấu hình tốt hơn cũng như hỗ trợ nền tảng 64 bit.

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


  • Thoi su 24h282 Dam dai phan cach o to bi xuyen toac
    Thời sự 24h(28/2): Đâm dải phân cách, ô tô bị xuyên toạc

    'Để công an xã điều tra dễ bỏ lọt, oan sai'; Đâm vào dải phân cách, ô tô bị xuyên toạc trên cao tốc; Tịch thu bán đấu giá hòn đá gần 30 tấn, giá chục tỷ đồng;... là những thông tin thời sự đáng chú ý ngày 27/2.

  • Thoi su 24h272 Giang chuc 2 PGD So
    Thời sự 24h(27/2): Giáng chức 2 PGĐ Sở

    Giảm gần 3 tỷ USD xây sân bay Long Thành; Bán sân bay Phú Quốc lấy vốn xây sân bay Long Thành; Thanh Hóa bắt xe giường nằm ‘nhồi" 117 khách; Hai PGĐ sở đánh nhau bị giáng chức, cảnh cáo;Đắk Nông: Đào được hòn đá quý 27 tấn...

  • Thoi su 24h 262 Vietjet muon mua lai nua san bay Noi Bai
    Thời sự 24h (26/2): Vietjet muốn mua lại nửa sân bay Nội Bài

    ATM của Agribank bị phá, lấy đi gần 1 tỷ đồng; Vietjet muốn mua lại nửa sân bay quốc tế Nội Bài; Phá sàn vàng "hút" 180 tỷ đồng của nhà đầu tư; Ùn tắc kéo dài: Hà Nội tháo rào chắn; Tháng 3, có 4 đợt không khí lạnh...

  • Thoi su trong ngay Cuong do la len tieng ve vu tai nan
    Thời sự trong ngày: Cường đô la lên tiếng về vụ tai nạn

    Ông Nguyễn Quang Lập được tại ngoại điều tra; Siêu xe gây tai nạn đứng tên sở hữu Cường “đô la”; Sáp nhập ngân hàng: Những chuyện hậu trường; Cụ ông tử vong sau một giờ thuê khách sạn...

  • Thoi su 24h092 Hai xe khach tong nhau 10 nguoi chet
    Thời sự 24h(09/2): Hai xe khách tông nhau, 10 người chết

    Hai xe khách tông nhau, 10 người chết; Đề nghị cách chức TBT báo Người cao tuổi; Sập hầm khai thác đá xanh, 3 người tử vong; 2 người Việt lọt danh sách tỷ phú thế giới; Nơi củ sâm to bằng… củ sắn... là những thông tin thời sự nổi bật trong ngày 9/2.

  • Su kien quoc te noi bat 222 282
    Sự kiện quốc tế nổi bật (22/2 - 28/2)

    Lãnh đạo Đảng đối lập Nga bị ám sát ngay tại Moscow; kết quả vòng đám phán thứ 2 giữa Mỹ và Cuba; Mỹ xác nhận thông tin Trung Quốc đang tiến hành xây dựng các cảng hải quân và sân bay trên các đảo trên Biển Đông... là những tin chính trong tuần qua.

  • Nghin le chuyen tuan qua 2202 2802
    Nghìn lẻ chuyện tuần qua (22/02 - 28/02)

    Hàng loạt tai nạn thảm khốc trong 9 ngày nghỉ Tết; Mùng 6 Tết, dân làng Ném Thượng vẫn chém lợn ở sân đình; Hỗn chiến tại Lễ hội Đền Gióng; Tiền lẻ, chen lấn: Nét đặc trưng “mới” của lễ hội Việt? ... là những tin tức nổi bật được dư luận quan tâm trong tuần qua. ------------

  • Toan canh Showbiz tuan 2202 2802
    Toàn cảnh Showbiz tuần (22/02 – 28/02)

    ó nên chỉ trích hình ảnh GS Vũ Khiêu 'thơm' má hoa hậu Kỳ Duyên?,Vợ Baggio tiết lộ sảy thai 2 lần, bị 'cắm vài ba chục cái sừng', Các ngôi sao tranh cãi về “Chiếc váy màu gì?”, Kim Hyun Joong sắp có con với bạn gái bị hành hung, “Thiên thần” Karlie Kloss bỏ Victoria’s Secret,...là những thông tin giải trí nổi bật trong tuần.

  • Tin An ninh Phap luat tuan qua 2202 2802
    Tin An ninh - Pháp luật tuần qua (22/02 - 28/02)

    Ly kỳ chuyện đời các tướng cướp; Bị cáo về nhà ăn tết với… người bị hại; Vụ án khó điều tra bậc nhất lịch sử phá án Công an Hải Phòng; Những lá thư xin lỗi nức nở từ trại giam; 200 bánh heroin và những người đón Tết muộn; Các tổ 141 bắt nhiều vụ vận chuyển ma túy trong dịp Tết;......là những tin đáng chú ý trong tuần. ------------ Xem thêm: Tin An ninh - Pháp luật tuần qua (22/02 - 28/02), http://vietbao.vn/An-ninh-Phap-luat/Tin-An-ninh-Phap-luat-tuan-qua-2202-2802/2147540033/218/ Tin nhanh Việt Nam ra thế giới vietbao.vn

  • Tong hop Doi song tuan qua 232 292
    Tổng hợp Đời sống tuần qua (23/2 - 29/2)

    Dư âm của Tết Nguyên Đán vẫn còn đọng lại trong những câu chuyện gia đình, không khí lễ hội khắp mọi nơi. Những phong tục thờ cúng, giải hạn đầu năm trong dân gian; Những câu chuyện về ngày Thầy thuốc Việt Nam 27/2; Nhiều tấm gương sáng trong đời sống... và những tin tức an toàn thực phẩm bẩn là những thông tin nổi bật tuần vừa qua... ------------ Xem thêm: Tổng hợp Đời sống tuần qua (23/2 - 29/2), http://vietbao.vn/Doi-song-Gia-dinh/Tong-hop-Doi-song-tuan-qua-232-292/2147540036/111/ Tin nhanh Việt Nam ra thế giới vietbao.vn