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»

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

Hiện tượng El Nino dữ dội nhất lịch sử sắp tấn công Châu Á
00:00 / --:--

Video nổi bật

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

Mẹo nhỏ giúp bạn tăng cường bộ nhớ trên iPhone, iPad

Với những chiếc iPhone, iPad 16GB, bạn sẽ phải luôn phải cân nhắc trong việc lưu trữ sau một khoảng thời gian dài sử dụng, nếu không muốn bộ nhớ máy thiết bị bị đầy. Dưới đây là thủ thuật đơn giản giúp bạn dễ dàng quản lý bộ nhớ thiết bị của mình.

Giải pháp vàng giúp điện thoại không bao giờ cạn pin

Với nhiều dòng sản phẩm sạc pin đa dạng và tiện lợi, rất có thể trong một tương lai không xa, người dùng điện thoại sẽ không còn phải thấm thỏm lo lắng chiếc điện thoại của mình bị “cạn năng lượng” nữa.

Chẩn đoán và khắc phục bàn phím hỏng trên laptop

Chắc chắn rằng bạn sẽ chẳng thể làm được việc gì nếu như bàn phím trên laptop của mình không hoạt động. Hãy làm theo các phép thử sau, biết đâu được bạn có thể \'hồi sinh\' chiếc bàn phím.

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ệ


  • Xe may vo chu chua 1 6 ty dong
    Xe máy 'vô chủ' chứa 1,6 tỷ đồng

    Công an huyện Hương Sơn cho biết, mặc dù đã xác định được chủ đăng ký của chiếc xe máy có 1,6 tỉ đồng bỏ lại bên đường là ai. Tuy nhiên chủ chiếc xe cho biết đã chuyển chiếc xe lại cho chồng, người chồng đang thụ án tù về tội..

  • Be gai bi me tuoi xang thieu song
    Bé gái bị mẹ tưới xăng thiêu sống

    Chỉ vì bán không hết vé số, bé Nguyễn Thị Kim L. ( 13 tuổi ) bị mẹ ruột tưới xăng. Trong lúc bị phỏng nặng, cháu bé đã lao tới ôm lấy mẹ để cầu cứu.

  • Nghi van ban trai bi mat cua HH Ky Duyen
    Nghi vấn "bạn trai bí mật" của HH Kỳ Duyên

    Kỳ Duyên đã lên tiếng khi thông tin "bạn trai bí mật" bất ngờ được hé lộ.

  • Nhung vu canh sat giao thong bat cuop
    Những vụ cảnh sát giao thông bắt cướp

    Đã có rất nhiều trường hợp vận chuyển ma túy, đối tượng truy nã bị bắt giữ ngay trên đường di chuyển và dĩ nhiên ở góc độ này, Cảnh sát giao thông chính là những người đấu tranh trực tiếp với những kẻ phạm tội

  • Bangkok rung chuyen vi danh bom
    Bangkok rung chuyển vì đánh bom

    19 giờ tối 17/8, một quả bom được cài ngay bên trong khuôn viên ngôi đền Hindu giáo ở trung tâm thủ đô Bangkok của Thái Lan đã phát nổ, gây ra một cảnh tượng tang hoang, hỗn loạn. Chưa có tổ chức nào nhận trách nhiệm gây ra vụ..

  • Nghin le chuyen tuan qua 2308 2908
    Nghìn lẻ chuyện tuần qua (23/08 - 29/08)

    Lịch cấm đường tại Hà Nội để phục vụ Quốc Khánh 2/9; Bữa ăn 5.000 đồng của bệnh nhân tâm thần; Taxi điên gây náo loạn phố Hà Nội; Bé gái bị mẹ tưới xăng thiêu sống; Chuyện lạ về 40 chiếc ví rơi ở Đà Nẵng, Hội An; Người Việt đang đầu độc cả trí óc con trẻ...là những tin tức nổi bật được dư luận quan tâm trong tuần qua. ------------ Xem thêm: Nghìn lẻ chuyện tuần qua (23/08 - 29/08), http://vietbao.vn/Xa-hoi/Nghin-le-chuyen-tuan-qua-2308-2908/2147593370/157/ Tin nhanh Việt Nam ra thế giới vietbao.vn

  • Toan canh kinh te tuan 2308 29082015
    Toàn cảnh kinh tế tuần 23/08 - 29/08/2015

    Theo Cục Điều tiết điện lực, giá mua điện của EVN hiện là 1087,3 đ/kWh nhưng giá điện mà EVN bán ra thị trường tới 1.622,05 đồng/kW/h và từ năm 2016 thị trường bán buôn cạnh tranh sẽ chính thức vận hành nhưng mới chỉ là vận hành trên giấy; ngày 24/8 NHNN phát đi thông điệp khẳng định sẽ không tiến hành điều chỉnh tỉ giá nữa và sẽ áp dụng các biện pháp để ổn định tỉ giá cuối năm 2015 và đầu 2016; ------------ Xem thêm: Toàn cảnh kinh tế tuần 23/08 - 29/08/2015, http://vietbao.vn/Kinh-te/Toan-canh-kinh-te-tuan-2308-29082015/2147593361/47/ Tin nhanh Việt Nam ra thế giới vietbao.vn

  • Tin An ninh Phap luat tuan qua 2308 2908
    Tin An ninh - Pháp luật tuần qua (23/08 - 29/08)

    Xe máy 'vô chủ' chứa 1,6 tỷ đồng; Rùng mình với những quái chiêu đòi nợ 'vô tiền khoáng hậu'; Trộm cắp tài sản dịp nghỉ Lễ: Giúp bạn đề phòng; Đại gia mua dâm trẻ em ở miền Tây được tại ngoại; Phạm nhân hồi hộp chờ ngày đặc xá; Số phận đau thương của bé gái bị mẹ dùng xăng đốt;.....là những tin đáng chú ý trong tuần. ------------ Xem thêm: Tin An ninh - Pháp luật tuần qua (23/08 - 29/08), http://vietbao.vn/An-ninh-Phap-luat/Tin-An-ninh-Phap-luat-tuan-qua-2308-2908/2147593334/218/ Tin nhanh Việt Nam ra thế giới vietbao.vn

  • Diem lai tin Suc khoe quan trong tuan qua 2208 2908
    Điểm lại tin Sức khỏe quan trọng tuần qua (22/08 - 29/08)

    Việt Nam là điểm nóng của các bệnh truyền nhiễm mới nổi; Bé sơ sinh bị đâm xuyên sọ đã xuất viện; Thực hư thông tin xem điện thoại trong đêm bị ung thư mắt; Tiếp tục cảnh báo mối nguy về bệnh sốt xuất huyết; Những lưu ý không thể bỏ qua khi ăn bánh Trung thu; Cảnh báo lỗi của bố mẹ khiến con dậy thì sớm;... là những tin Sức khỏe quan trọng tuần qua. ------------ Xem thêm: Điểm lại tin Sức khỏe quan trọng tuần qua (22/08 - 29/08), http://vietbao.vn/Suc-khoe/Diem-lai-tin-Suc-khoe-quan-trong-tuan-qua-2208-2908/2147593388/248/ Tin nhanh Việt Nam ra thế giới vietbao.vn

  • Su kien quoc te noi bat 238298
    Sự kiện quốc tế nổi bật (23/8-29-8)

    Hai miền Triều Tiên đạt thỏa thuận 6 điểm nhằm giảm căng thẳng; Mỹ điều 3 máy bay ném bom tàng hình hỗ trợ Hàn Quốc; MC truyền hình Mỹ bị bắn chết khi đang dẫn trực tiếp; Xả súng kinh hoàng ở miền Bắc nước Pháp làm 7 người thương vong... là những tin chính trong tuần qua. ------------ Xem thêm: Sự kiện quốc tế nổi bật (23/8-29-8), http://vietbao.vn/The-gioi/Su-kien-quoc-te-noi-bat-238298/2147593385/433/ Tin nhanh Việt Nam ra thế giới vietbao.vn