ƯƠ

NG TH C

CH

NG 4.

ƯƠ PH (Method)

TR N MINH THÁI Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn

1

1

ươ

C u trúc ch

ng trình

2

Khai báo thư viện Khai báo hằng số …

Khai báo

Cài đặt những phương thức

Phương thức

N Ả B

Ơ C H N Ì R T G N Ơ Ư H C

Gọi thực hiện các phương thức theo yêu cầu của bài toán

Main()

Ví dụ

ươ

ng n,

ậ ố

ố Xét ch ố in ra màn hình các s  nguyên t

ươ ng trình nh p vào s  nguyên d ỏ ơ  nh  h n n

Ví d : ụ ậ

Nh p n = 10  ả

ế

K t qu  in ra màn hình là: 2, 3, 5, 7

3

static void Main(string []args) {

int n; Console.Write("Nhap so nguyen duong: “); n = int.Parse(Console.ReadLine()); Console.WriteLine("Cac so nguyen to nho hon n la:“); for(int so=2; so

4

int d=0;  for(int i=1; i<=so; i++) {

if(so%i==0) d++;

} if(d==2)

Console.Write(so + " ");

}

}

Ki m tra xem  ố so có ph i ả ố là s  nguyên t ?

static void Main(string []args)

{

int n;

5

Console.WriteLine("Cac so nguyen to nho hon n la:“);

for(int so=2; so

{

ậ ố ươ Nh p s  nguyên d ng n

ả ố ố ế ố   không?  N u  là  s

}

}

ố ể Ki m  tra  xem   thì in  nguyên t so  có  ph i  là  s   nguyên  t so ra màn hình

static void NhapSoNguyen(out int n)

{

6 Console.Write("Nhap so nguyen duong: “);

n = int.Parse(Console.ReadLine());

} Tham số

static bool LaSNT(int k)

{

Tên hàm int d=0;

for(int i=1; i<=k; i++)

{

if(k%i==0)

d++;

}

return d==2;

}

static void Main(string []args) {

7

int n; NhapSoNguyen(out n);

G i hàmọ

ố ố ề Truy n đ i s

Console.WriteLine("Cac so nguyen to nho hon n la:“); for(int so=2; so

Console.Write(so + " “);

G i hàmọ

}

}

ố ố ề Truy n đ i s

Khái ni mệ

8

̀ ̀ ̀ ươ ứ ươ ự ̣ ̣ ̣ ̣ ̣ ̣ ̣ ̣ Ph ng  th c (ha m) la   môt  đoan  ch ng tri nh  đôc lâp th c  hiên tron ven môt

́ ̀ ́ ả ươ ứ ̣ ̣ ̉ ̣ ế  và tra vê  k t qu  cho ph ng th c goi no công viêc nhâ t đinh

ử ụ ươ Khi nào s  d ng ph ứ ng th c?

 Khi co  môt công viêc giô ng nhau câ n th c hiên

́ ́ ̀ ự ̣ ở ̣ ̣ ̣ ́ ̀  nhiê u vi tri

 Khi câ n chia nh  ch

8

̀ ̃ ỏ ươ ̉ ̉ ̀ ng tri nh đê dê  quan lý

ươ

Ph

ng th c

ẫ ổ ủ ươ M u t ng quát c a ph ứ ng th c

́ ạ ươ ứ   TênPh ngTh c([tham sô ]);

ạ Ph m vi

ị ươ ứ ượ ọ ử ụ ạ  Xác đ nh ph m vi hay cách ph ng th c đ c g i (s  d ng)

ừ ạ Các t khoá ph m vi : private, public, static

ươ

Ph

ng th c

ủ ươ ứ ầ ồ KDL c a ph ạ ng th c (đ u ra), g m 2 lo i

ả ề ị void: Không tr  v  giá tr

ể ấ ả ề ị ươ ứ ng  ng

ả ử float / int / long / string / ki u c u trúc / … : Tr  v  giá tr  có  KDL t ớ ế v i k t qu  x  lý

ươ

Ph

ng th c

ướ ứ ả c  sao  cho  ph n  ánh  đúng  ch c  năng

ươ ươ ứ Tên  ph ệ ủ ự th c hi n c a ph ặ ng  th c  :  Đ t  tên  theo  qui  ứ ng th c

ầ ươ

ườ ủ ể ầ ợ ả ầ ộ ố ứ ng  th c  (trong  m t  s   ế ứ ế ng th c n u k t qu  đ u ra

ề ọ ị ủ ố ế  Danh  sách  các  tham  s   (n u  có)  :  đ u  vào  c a  ph ươ ầ ng h p có th  là đ u vào và đ u ra c a ph tr ế ố có nhi u giá tr  ­ Tham s  này g i là tham chi u)

ế

Khi hàm x  lý bi n toàn c c thì không c n tham s

ế ạ Nên h n ch   dùng

static int a, b; static void Nhap() {

Console.Write("Nhap a: ");     a = int.Parse(Console.ReadLine());     Console.Write("Nhap b: ");     b = int.Parse(Console.ReadLine()); } static void Xuat() {     Console.WriteLine("a = {0}; b = {1}", a, b); } static void Main(string[] args) {     Nhap();     Xuat(); }

ươ

ả ề

Ph

ị ng th c không tr  v  giá tr

́

́

ươ

static void TênPh

́ ngTh c([danh sa ch ca c tham sô ])

{

́

́

́      Khai ba o ca c biê n cuc bô

́

́

́

̀ ơ

ươ

̣ ̣

Ca c câu lênh hay l

i goi đê n ph

ng th c kha c.

}

ươ

ố ố

ngTh c

 G i: ọ TênPh

ứ (danh sách tên các đ i s );

̀

̃

ươ

ươ

ư

ơ

̣ ̣

̃ ư  Nh ng  ph

ng  th c  loai  na y  th

̀ ̀ ng  r i  va o  nh ng

́

́

́

́

̃ ư

́ ư

̣

́ nho m ch c năng: Nhâp / xuâ t d  liêu, thô ng kê, să p xê p,

̣ ̣

liêt kê

̣

̀

ươ

ng tri nh nhâp sô  nguyên d

ng n va  in

̀

ươ

̣

̀ ́ ươ Viê t ch ́ ̀ ra ma n hi nh ca c

́ ́ ́ c sô  cua n

́

̉

ố Input: s  nguyên d

́

́

̣

ả ề ủ

́ ươ ng (Xa c đinh tham sô ) ́ ươ c sô  cua n (Xa c đinh KDL  ứ ng th c) ầ

ả ề

́  Output: In ra ca c  ươ tr  v  c a ph  Xu t ấ  Không c n tr  v  giá tr

ị  KDL la  ̀

̀

ươ

̉ ̣

 Xa c đinh tên ph

ứ ng th c: Ph

ứ ng th c na y

void. ́ ̀

́

ươ ́

̣

̀ du ng in ra ca c US cua n nên co  thê đăt la   LietKeUocSo

static void LietKeUocSo(uint n)

̉ ̉ ̣

static void LietKeUocSo(uint n) {

for (int i = 1; i <= n; i++)

if (n % i == 0) Console.Write("{0}\t", i);

} static void Main(string[] args) {

uint n; Console.Write("Nhap so nguyen duong n: "); n=uint.Parse(Console.ReadLine()); Console.Write("Cac uoc so cua {0}: ", n); LietKeUocSo(n); Console.ReadLine();

}

ươ

ả ề ế

Ph

ng th c có tr  v  k t qu

ươ

static  TênPh

ngTh c([tham sô ])́

{

 kq;

́

́

́ Khai ba o ca c biê n cuc bô

́

́

ơ

ươ

̣ ̣

Ca c câu lênh hay l

̀ i goi đê n ph

ng th c

kha c.́

return kq;

} G i: ọ

ế

ươ

ố ố

 Tên bi n = TênPh

ngTh c(tên các đ i s );

ươ

ườ

ơ

ng  r i  vào  các  nhóm:

ng  th c  này  th ế

ế

Nh ng  ph ổ Tính t ng, tích, trung bình, đ m, ki m tra, tìm ki m

̣ ̣

̀ ng n va

̣

́ n

n

̀ ng tri nh nhâp sô  nguyên d  321

;

ươ 0

́ ươ Viê t ch Sn ́ ti nh

́

(cid:0) (cid:0) (cid:0) (cid:0) (cid:0) (cid:0)

ố Input: s  nguyên d

́ ng n (Xa c đinh tham sô )

ả ề ủ

̣

ươ ́  Output: Tông S (Xa c đinh KDL tr  v  c a

ươ

̣ ổ

̉ ̣

̀

ươ

̉

̃ ̀

̀

̉

́ ng

ph ng th c) ́ ̀ Tra vê  gia  tri t ng (S). ̀ ́ S la  tông ca c sô  nguyên d ng nên S cu ng la   ̀ ươ   Kiêu  tra  vê   cua  ha m  la   ́ sô   nguyên  d ulong.  ́

́

̀

̉ ̉ ̉

ngTh c:  Du ng  ti nh  tông  S

̣ ̉

ươ TongS

 Xa c  đinh  TênPh ̀ ́ nên co  thê đăt la

static ulong TongS(uint n)

̉ ̣

static ulong TongS(uint n) {

ulong kq = 0;

for (uint i = 1; i <= n; i++)

kq + = i;

return kq;

} static void Main(string[] args) {

ulong S;    uint n;

Console.Write("Nhap vao so nguyen n: ");      n = uint.Parse(Console.ReadLine());      S = TongS(n);      Console.Write("Tong tu 1 den n: " + S);      Console.ReadLine();

}

ế

ậ Bài t p – Nh p giá tr  các bi n trong  Main()

̀

̀

̀

́

ươ

́ § Viê t  ch

́ ng  tri nh  ti nh  diên  ti ch  va   chu  vi  hi nh

tro n.̀

́

̀

́

̀

ự

̣

́ § Nhâp va o 3 sô  th c a, b, c va  kiêm tra xem chu ng co

́

̀

́

̣ ̉

lâp tha nh 3 canh cua môt tam gia c hay không? Nê u

̃

́

̀

̃

́

̀

̀ ươ

̣ ̣ ̉ ̣

́ co  ha y ti nh diên ti ch, chiê u da i mô i đ

ng cao

̀

́

́

̀

̀

̣

cua tam gia c va  in kê t qua ra ma n hi nh.

Diện tích tam giác: s = sqrt(p*(p-a)*(p-b)*(p-c) )

với p là nửa chu vi của tam giác

Tính các đường cao: ha = 2s/a, hb=2s/b, hc=2s/c.

̉ ̉

Bài t pậ

§ Viết chương trình nhập 2 số nguyên dương a,

b. Tìm USCLN & BSCNN.

§ Viết chương trình nhập số nguyên dương n,

tính tổng các ước số của n.

Ví dụ: Nhập n=6

Tổng các ước số từ 1 đến n: 1+2+3+6=12.

§ Nhập vào giờ, phút, giây. Kiểm tra xem giờ,

phút, giây đó có hợp lệ hay không?

21

ế

T m v c c a bi n

ạ ố Ph m vi kh i

ạ Ph m vi hàm

ạ ậ Ph m vi t p tin

ạ ươ Ph m vi ch ng trình

22

ố Ph m vi kh i

ố ượ ớ ạ ặ ở ộ  M t kh i đ c gi i h n b i ngo c {}.

ạ ộ ế ạ ố ố ỉ Bi n khai báo trong kh i đó có ph m vi kh i, nghĩa là nó ch  ho t đ ng trong

ố ọ ế ưọ ạ kh i đó mà thôi. Ph m vi này còn g i là ọ c g i là c c bụ ộ, và bi n đ bi n ế

c c bụ ộ.

23

Ph m vi kh i (tt)

static void Main(string args[]) {

int i=20; {

int i=10; Console.WriteLine("Gia tri i ben trong khoi: “ + i);

} Console.WriteLine("Gia tri i ben ngoai khoi: « + i);

}

K t quế Gia tri i ben trong khoi: 10 Gia tri i ben ngoai khoi: 20

24

Ph m vi hàm

ừ ầ

ế

ộ   đ u  đ n  cu i  m t  hàm,  ch   có  tác

ạ ộ Ho t  đ ng  t ụ d ng trong hàm

static void Main(string []args) {

int k; float m; double x; ệ //Các l nh khác //…

}

25

Ph m vi t p tin

static int x = 0;           static int y = 0;  static float z = 0.0; static void Main() {    int i;       //Các l nhệ    .    . }

ế ượ ụ ừ Bi n đ c khai báo toàn c c và có kèm t khóa static

ươ

Ph m vi ch 26

ng trình

ượ

int a, b; static void Nhap() {

Console.Write("Nhap a: “); a = int.Parse(Console.ReadLine()); Console.Write("Nhap b: “); b = int.Parse(Console.ReadLine());

} static void Main(string []args) {

ươ

 Đ c  khai  báo  bên  c ượ ngoài  hàm  –  còn  đ ụ ế ọ g i là bi n toàn c c  Không nên khai báo s  ử ế ề ụ d ng nhi u n u không  ế ự ự ầ t, vì nó  th c s  c n thi ạ ở ẽ s   gây  tr   ng i  cho  i khi  quá trình dò tìm l debug ch

ỗ ng trình

int c; Nhap(); c = a + b; Console.WriteLine("Tong = “+c);

}

ế

Tham s  là tham chi u

ả ử ố ư ủ ế ườ ườ ậ ợ Tham s  l u k t qu  x  lý c a hàm: out (th ng dùng cho tr ng h p nh p

ế ề ả ị ữ ệ d  li u, k t qu  hàm có nhi u giá tr )

ố ừ ầ ầ Tham s  v a làm đ u vào và đ u ra: ref

 Dùng t

ừ ướ ủ ố ướ ố khóa ref ho c ặ out tr c KDL c a khai báo tham s  và tr c tên đ i

ọ ươ ứ ố s  khi g i ph ng th c.

ế

Tham s  là tham chi u

ố ố ướ

Dùng t

khóa

c khi truy n vào

ref b t bu c ph i kh i gán giá tr  ban đ u cho đ i s  tr

ươ

ế

ế

ọ khi g i ph

ng th c (N u dùng

t)

out thì không c n thi

ướ

Hoán v  2 s  nguyên a, b cho tr

c

ế

ươ

ế Đánh giá k t qu  khi vi

t ch

ng trình v i hai

ườ

tr

ợ ng h p sau

ườ

1. Tr

ế ng h p không dùng tham chi u

ườ

2. Tr

ng h p dùng tham chi u:

ế ref

Không dùng tham chi uế

static void HoanVi(int a, int b)

{

int tam = a;

a = b;

b = tam;

Console.WriteLine("Trong HoanVi: a = " + a + ";b = " + b);

}

static void Main(string[] args)

{

int a = 5, b = 21;

Console.WriteLine("Truoc HoanVi: a = {0}; b = {1}", a, b);

HoanVi(a, b);

Console.WriteLine("Sau HoanVi: a = " + a + ";b = " + b);

}

Dùng tham chi uế static void HoanVi(ref int a, ref int b)

{

int tam = a;

a = b;

b = tam;

Console.WriteLine("Trong HoanVi: a = " + a + "; b = " + b);

}

static void Main(string[] args)

{

int a = 5, b = 21;

Console.WriteLine("Truoc HoanVi: a = {0}; b = {1}", a, b);

HoanVi(ref a, ref b);

Console.WriteLine("Sau HoanVi: a = " + a + ";b = " + b);

}

ử ụ

ế

Ví d  ­ s  d ng tham chi u out

static void Nhap(out int a, out int b)

{             Console.Write("Nhap a: ");             a = int.Parse(Console.ReadLine());             Console.Write("Nhap b: ");             b = int.Parse(Console.ReadLine());       }

static int Tong(int a, int b)

{             return a + b;       }         static void Main(string[] args)         {             int a, b;             Nhap(out a, out b);             s=Tinh(a, b); ầ             Console.WriteLine(“{0}+{1}={2}”, a, b, s);

}

Tr n Minh Thái

Nguyên t c xây d ng hàm

33

ả ề ủ

ế

 KDL tr  v  c a hàm

ả ủ  K t qu  c a hàm?   Hàm làm gì?  Xác đ nh tên hàm  C n nh ng thông tin gì?

 Tham số

ng v i m i thông tin đã xác đ nh, xác đ nh

ị ướ

ư

ớ xem đã có giá tr  tr

c khi vào hàm ch a,

ế

­ N u ch a có

ư  Tham chi uế

ế

v n không thay đ i

ế

­  N u  có  mà  sau  khi  th c  hi n  xong  hàm  ổ  Tham trị ệ ự ­ N u có mà sau khi th c hi n xong hàm thì  ị giá tr  cũng b  thay đ i theo

 Tham chi uế

Bài t pậ

34

̀

́

́

̀

̀

̀

̣ ̉

́

̀

́

ươ

̣ ̣

̀ ́ ơ ̀  ba n phi m. ́ ̀ ́

̀

́

̣

̀ ư c  nhâp  t

́ ươ 1.Viê t ch ng tri nh ti nh diên ti ch va  chu vi cua  ̀ ̃ ̀ ư hi nh  ch   nhât  v i  chiê u  da i  va   chiê u  rông  ̣ ư ượ c nhâp t đ ́ 2.Viê t  ch ng  tri nh  ti nh  diên  ti ch  va   chu  vi  ̀ ́ ̀ ̀ ượ ơ hi nh  tro n  v i  ba n  ki nh  đ   ba n  ́ phi m.

̀

́

ự

̣

̀ ́

̀

̣ ̉

́ ́

́

̃

̣ ̣ ̉ ̣

́ ̀

́

̀

̃

̣

́

̀

̉

̀

́

́

3.Nhâp  va o  3  sô   th c  a,  b,  c  va   kiêm  tra  xem  ̀ chu ng  co   tha nh  lâp  tha nh  3  canh  cua  môt  tam  ́ ́ gia c  hay  không?  Nê u  co   ha y  ti nh  diên  ti ch,  ̀ ̀ ươ chiê u  da i  mô i  đ ng  cao  cua  tam  gia c  va   in  ̀ kê t qua ra ma n hi nh. ươ

ươ

̉

ng tri nh nhâp 2 sô  nguyên d

4.Viê t ch

ng a,

̀

́

̀

̣

b.  Ti m  USCLN  va   BSCNN  cua  hai  sô   nguyên

đó

̉

Bài t pậ

35

́

ươ

ng  n,  ti nh

̀ ố ươ

̣

ươ ng  tri nh  nhâp  sô   nguyên  d ́ ươ c s  d

́ ủ ng c a n.

̉

́ 5.  Viê t  ch ́ tông ca c  Vi  dú

̣: Nhâp n=6 ổ

ế

T ng các

1 đ n n: 1+2+3+6=12.

ướ ố ừ c s  t ́

̣

̀ ̀ ơ ơ , phu t,  , phu t, giây. Kiêm tra xem gi ̀

̀ ́

̀

́

̣ ̉

́ 6. Nhâp va o gi ́ ợ giây đo  co  h p lê hay không? In kê t qua ra ma n hi nh.

̀

́

̣ ̉

ươ ng tri nh nhâp sô  nguyên d ́ ́

̀ ̀

́

́

ư

́ ươ ng n gô m k  7. Viê t ch ́ ̃ ̃ ư ch   sô ,  đê m  xem  n  co   bao  nhiêu  ch   sô   la   sô   nguyên tô .́

̣

́

̀

́ 8.  Viê t  ch

́ ́

̀

̣ ̣

̃ ư ́

́

́

ươ ng  tri nh  ti nh  tiê n  thuê  ma y  dich  vu  ̀ ̀ ̀ ́ ơ ơ  bă t đâ u thuê  ̀ ́ ơ   kê t  thu c  thuê  (GKT),  sô   ma y  thuê

̀

̃ ư

̣ ̣

̀ ́ ơ  la  sô  nguyên

Gi

̀ Internet. V i d  liêu nhâp va o la  gi 36 (GBD),  gi (SoMay).  ̀  Điê u kiên cho d  liêu nhâp: 6<=GBD

).

̃

́

̃

̀

́

ơ

ơ

ươ

̀ ơ

 Đ n gia : 2500đ cho mô i gi

́ ̀  ma y tr

́ c 17:30 va  3000đ cho mô i gi

ma y sau 17:30.

̀

ươ

ươ

́ 9.  Viê t  ch

̀ ̀

̃

̣ ̣ ̣

̀ ́ ng  tri nh  ti nh  tiê n  l ́ ́ ươ c gi

̀ ơ  va o ca, gi

ng  nga y  cho  công  ̀ ơ  ra ca cua mô i

nhân, cho biê t tr ng

i. ̀ươ

̃

ơ

̉

̉

̀ ̉ ử  Tiê n tra cho mô i gi

Gia s  ră ng: ́ ̀ ̀ ơ ươ  tr

c 12 gi

̀ ̀ : 6000đ va  sau 12 gi

: 7500đ.

́

́

̀

̀

́

̀

̃

́

̀

ơ

ơ

̀ ơ

ơ

là s  nguyên).

 Gi

̀  va o ca s m nhâ t  la  6 gi

sa ng va  gi

̀  ra ca trê  nhâ t la  18 gi

̀ ơ (Gi

37

Gi

i thi u hàm đ  qui

̀

́

́

́

ượ

 Môt  ha m  đ

̀

̣ ̣ ̣

́

̀

́

̉ ̣ ̣ ̣

̣

c  goi  co   ti nh  đê  qui  nê u  ́ ́ trong  thân  cua  ha m  đo   co   lênh  goi  lai  ̀ ́ ươ chi nh no  môt ca ch t ng minh hay tiê m  ân.

̉

 Phân loai đê qui

́

́

̣ ̣

̣ ̣

̃

ươ

̣

 Đ  qui tuyê n ti nh.  Đê qui nhi phân.  Đê qui phi tuyê n.́  Đê qui hô  t ng.

̣

38

́

́

Đ  qui tuyê n ti nh

̀

́

̀ ̣ ơ

i  goi  ha m  goi  lai  chi nh

̀ ́

̣ ̣ ̣

́

́

̉ ư

̣

́ ́ Trong  thân  ha m  co   duy  nhâ t  môt  l ̀ no  ́ ươ ng minh. môt ca ch t ̀ ̃   TenHam () {

̀

̀

̣ ư

if (điê u kiên d ng) {

́

́

́

̀

̣

. . . //Tra vê  gia  tri hay kê t thu c công viêc

ự

̉ ̣ ̣

́

́ ́ ́

ự

̣ ̣ ̣

} ́ ́ //Th c hiên môt sô  công viêc (nê u co ) . . . TenHam (); ́ ́ //Th c hiên môt sô  công viêc (nê u co )

}

̣ ̣ ̣

39

nS

n

321)(

́ ̣: Ti nh

Vi  dú ̀

̣ ư

̀ ­ Điê u kiên d ng: S(0) = 0.

́

́

́

ư

­ Qui tă c (công th c) ti nh: S(n) = S(n­1) + n.

long TongS (int n)

{

if(n==0)

return 0;

return ( TongS(n­1) + n );

}

(cid:0) (cid:0) (cid:0) (cid:0) (cid:0)

40

̣

́ ́ ̀ ́ ̀ ́ ̀ ươ ̉ ̣ ̣ ̣ ̣

Đê qui nh  phân ̀ ơ i goi ha m goi lai chi nh no  môt ca ch t

Trong thân cua ha m co  hai l ng minh.

̀ ́ ́ ̉ ư ̣ ̃ TenHam ()

{

̀ ̀ ̣ ư if (điê u kiên d ng)

{

. . .

ự

́ ́ ́ ̀ ̉ ̣ ̣ //Tra vê  gia  tri hay kê t thu c công viêc

́

̀

́

́

̉ ơ

̣ ̣ ̣

ự

̉

́

̀

́

́

̀

̣ ̣ ̣

ự

̉ ̣

} ́ ́ ́ //Th c hiên môt sô  công viêc (nê u co ) ́ . . .TenHam (); //Giai quyê t vâ n đê  nho h n  ́ ́ ́ //Th c hiên môt sô  công viêc (nê u co ) ́ . . . TenHam (); //Giai quyê t vâ n đê  co n lai ́ ́ ́ //Th c hiên môt sô  công viêc (nê u co )

̣ ̣ ̣

}

f1 = f0 =1 ;

́ ́ ̃ ư ượ ư ̣ ̉ ̣ 41 ́ Vi  du: ́ ̣  Ti nh sô  hang th  n cua da y Fibonaci đ ̃ c đinh nghi a nh  sau:

(n>1)

fn = fn­1 + fn­2­ ; ̀ ̣ ư

̀ Điê u kiên d ng: f(0) = f(1) = 1.

long Fibonaci (int n)

{

if(n==0 || n==1)

return 1;

return  Fibonaci(n­1) + Fibonaci(n­2);

}

̣

Đê qui phi tuyê ń

́

̉ ̣ ̣

́

̀

̀ ượ

̣ ̣

̀ ̀ ơ i goi ha m goi  c  đăt  bên  trong  vo ng

̀

́

̣

TenHam (

̉ ư tham sô >)́

{

for (int i = 1; i<=n; i++)

́

ự

̣ 42 Trong thân cua ha m co  l ́ lai  chi nh  no   đ lăp. ̃

́ ́ { //Th c hiên môt sô  công viêc (nê u co )

̀

̀

̣ ư

if (điê u kiên d ng)

{ . . .

́

́

̀

́

̣ ̣ ̣

//Tra vê  gia  tri hay kê t thu c

công viêc̣

}

else

́

ự

̉ ̣

{ //Th c hiên môt sô  công viêc

́

́

(nê u co )

́

́

TenHam ();

}

}

}

̣ ̣ ̣

́ ̃ ́ ượ ư ̣ ̉ ̣ ́ Vi  du: ́ ư ̣  Ti nh sô  hang th  n cua da y {Xn} đ ̃ c đinh nghi a nh  sau:

X0 =1 ; 43

Xn = n2X0 + (n­1)2X1 + … + 12Xn­1­ ; (n≥1)

̀ ̀ ̣ ư Điê u kiên d ng:X(0) = 1.

long TinhXn (int n)

{

if(n==0)

return 1;

long s = 0;

for (int i=1; i<=n; i++)

s = s + i * i * TinhXn(n­i);

return s;

}

44

ỗ ươ

̣

Đê qui h  t ̀

̀

ơ

́

̀

̀

̀ ̀

̀ ơ

̉ ̣

Trong  thân  cua  ha m  na y  co   l trong thân cua ha m kia co  l

̉ ̣

ng ́ ̀ ơ i goi ha m t

́ ̀ ̀ i  goi  ha m  đê n  ha m  kia  va   ̀ ́ i ha m na y.

g()

f()

f()

g()

f()

h()

̀

́

́

̉ ư

̃

TenHam2 ();

̣

̀

́

́

̉ ư

̃

TenHam1 ()

́

ự

45 ̣

́

́

́

ự

̣ ̣ ̣

{ ́ ́ //Th c hiên môt sô  công viêc (nê u co ) …TenHam2 ();  ́ ́ //Th c hiên môt sô  công viêc (nê u co )

}

̀

́

́

̉ ư

̣ ̣ ̣

̃

TenHam2 ()

́

ự

̣

́

́

́

ự

̣ ̣ ̣

{ ́ ́ //Th c hiên môt sô  công viêc (nê u co ) …TenHam1 ();  ́ ́ //Th c hiên môt sô  công viêc (nê u co )

}

̣ ̣ ̣

́

́

̃

̃

́

ư

ượ

̣  Ti nh sô  hang th  n cua hai da y {Xn}, {Yn} đ

ư c đinh nghi a nh

́ Vi  du: sau: 46 X0 =Y0 =1 ;

Xn = Xn­1 + Yn­1;

(n>0)

Yn = n2Xn­1 + Yn­1; (n>0)

̀

̀

̣ ư

­ Điê u kiên d ng: X(0) = Y(0) = 1.

long TinhYn(int n);

long TinhXn (int n)

{

if(n==0)

return 1;

return TinhXn(n­1) + TinhYn(n­1);

}

long TinhYn (int n)

{

if(n==0)

return 1;

return n*n*TinhXn(n­1) + TinhYn(n­1);

}

̣ ̉ ̣

ạ ộ

Cách ho t đ ng hàm đ  qui

47

 Ví d  tính n! v i n=5

GiaiThua(5)

GiaiThua(4)

GiaiThua(3)

GiaiThua(1)

main()

5n

4n

2n

5n

3n

1n

5 120

4 24

3 6

GiaiThua(2) 1 1

2 2

ụ ớ

Q&A