Bài viết này định nghĩa Đệ quy trong Java và các ứng dụng của nó cùng với một số ví dụ để hỗ trợ lý thuyết đệ quy, cũng như những ưu điểm và nhược điểm của việc viết mã đệ quy.

Bạn đang xem : Đệ quy trong java là gì

Tìm hiểu về Đệ quy trong Java

Tổng quan

Đệ quy là phương thức trong đó hàm tương tự được gọi trong chính nó trong một số lần xác định. Đệ quy diễn ra khi một hàm gọi chính nó. Đệ quy trong lập trình giúp giải quyết nhiều vấn đề, tức là tìm kiếm theo chiều sâu, tìm kiếm theo chiều rộng, duyệt theo thứ tự, duyệt theo thứ tự trước, duyệt theo thứ tự sau. Đệ quy có thể được sử dụng ở những nơi có mối quan hệ nhất định giữa vấn đề phụ và vấn đề chính, vì vậy các vấn đề phụ được giải quyết riêng lẻ và các giải pháp của tất cả các vấn đề phụ được kết hợp để có kết quả cuối cùng.

Phạm vi

  • Trong bài viết này, chúng ta sẽ hiểu định nghĩa của đệ quy và các ứng dụng của đệ quy trong lập trình.
  • Một số ví dụ được minh họa trong bài viết để hỗ trợ lý thuyết đệ quy.
  • Cuối cùng, chúng ta sẽ thấy những ưu điểm và nhược điểm của việc viết mã đệ quy trong quá trình lập trình.

Đệ quy trong Java là gì?

Hãy để chúng tôi hiểu về đệ quy bằng một ví dụ trong cuộc sống thực.
Mọi người chắc hẳn đã tham dự cuộc họp google. Hình ảnh sau đây cho thấy người dùng đang cố gắng hiển thị màn hình của mình trên google meet, nhưng anh ta nhận được hiển thị sau trên màn hình của mình. Bạn đã bao giờ tự hỏi Tại sao điều này lại xảy ra?

Mã giả

 
  

công khai

class

Đệ quy

{

tĩnh

presentScreen

()

{

// màn hình hiển thị

presentScreen (); } }

Nói cách kỹ thuật, hãy xem xét quy trình “p”; gọi một tiến trình “p” bên trong chính nó được gọi là đệ quy. Trong lập trình, đệ quy được sử dụng ở những nơi mà một bài toán lớn có thể được chia thành các bài toán con nhỏ hơn. Giải pháp của vấn đề phụ thuộc vào các trường hợp của bài toán con nhỏ hơn.

Cú pháp đệ quy trong Java

Như chúng ta đã thấy mã giả cho đệ quy, mã chạy liên tục trong thời gian vô hạn, vì không có điều kiện như vậy để dừng đệ quy. Vì vậy mọi đoạn mã đệ quy trong lập trình đều phải có điều kiện ngắt đoạn mã hoặc dừng đệ quy. Nếu điều kiện không được cung cấp hoặc không được đưa ra một cách chính xác sẽ dẫn đến lỗi tràn ngăn xếp. (lỗi tràn ngăn xếp: Loại lỗi này xảy ra khi vượt quá số lượng bộ nhớ ngăn xếp cuộc gọi mà JVM cho phép)

 
  

public < / p>

class

Đệ quy

{

methodRecurse (tham số) {

// nếu điều kiện tiên quyết thỏa mãn thì dừng đệ quy

nếu

(điều kiện == Đúng) {

trở lại

;

}

// thực hiện lệnh gọi đệ quy cho chính nó

methodRecurse (tham số); } }

Đệ quy hoạt động như thế nào? < / h2>

Hãy để chúng tôi hiểu hoạt động của đệ quy bằng cách sử dụng một câu lệnh vấn đề.
Giả sử có n số người đứng trong một hàng, và bạn là người đầu tiên trong một hàng. Bạn được yêu cầu đếm giá trị của n (đếm tổng số người trong một hàng đợi) mà không rời khỏi vị trí.

Để giải quyết vấn đề trên, chúng ta sẽ sử dụng đệ quy. Người đứng cuối cùng (vị trí thứ n) nói với người thứ n rằng có 0 người phía sau anh ta. Người đứng ở vị trí thứ n-1 nói với người đứng ở vị trí thứ n-2 rằng có 1 người đứng sau anh ta. Quá trình này tiếp tục cho đến khi thông tin đến được với người đầu tiên (bạn). Vì vậy, bạn sẽ nhận được tổng số người đứng sau bạn. Bằng cách này, bạn có thể tìm thấy giá trị của n.
Hình ảnh dưới đây cho thấy cách hoạt động của đệ quy.

Mã để đếm tổng số người.

 
  

class

Đệ quy

{

công khai

int

số lượng

< p> (currentPerson, countTillNow)

{

nếu

(currentPerson == firstPerson) {

trở lại

countTillNow +

1

;

}

// tăng tổng số

countTillNow ++;

// giảm vị trí hiện tại

currentPerson--;

// cuộc gọi đệ quy

return

count (currentPerson, countTillNow);

} }

Như chúng ta có thể thấy trong đoạn mã trên, hàm đếm đang gọi chính nó. Chương trình trên chạy cho đến khi Người hiện tại không bằng Người đầu tiên. Mỗi khi chúng ta gọi hàm đệ quy, chúng ta giảm bộ đếm của currentPerson đi một và tăng bộ đếm của countTillNow lên một.

Cái gì là Điều kiện cơ bản của đệ quy?

Trong khi viết các hàm đệ quy, việc chia một bài toán lớn thành các bài toán con nhỏ hơn là cần thiết. Điều kiện cơ sở của bất kỳ hàm đệ quy nào là bài toán con nhỏ nhất, không thể chia nó thành bài toán con bất kỳ. Nếu điều kiện cơ sở không được cung cấp hoặc không được cung cấp đúng cách, tái sử dụng sẽ chạy vô hạn và do đó nó sẽ gây ra lỗi tràn ngăn xếp.
Hãy để chúng tôi hiểu điều kiện cơ sở với một ví dụ. Hãy để chúng tôi tìm tổng các số lên đến 20 bằng cách sử dụng đệ quy trong java.

 
  

class

Scaler

{

tĩnh

int

tổng

< p> (

int

i,

int

currSum)

{

// trường hợp cơ sở

nếu

(tôi ==

1

) {

trả lại

1

;

}

// gọi hàm đệ quy

return

i + sum (i-

1

, currSum + i);

}

công khai

tĩnh

vô hiệu

main

(Chuỗi [] args)

{

System.out.println (

"Tổng các số có đến 20 là:"

+ sum (

20

,

0

));

} }

Đầu ra

 
  

& gt; Tổng các số lên đến

20

là:

210

Giải thích

Trong đoạn mã trên, chúng ta có thể thấy trường hợp cơ sở. Nếu giá trị của i bằng 1, thì hàm trả về 1. Trong bất kỳ trường hợp nào khác, chúng ta gọi hàm đệ quy và mỗi khi chúng ta gọi hàm đệ quy, chúng ta giảm giá trị của i đi 1 và tăng currSum lên i. Vì vậy, nếu giá trị của i là một, hàm đệ quy sẽ bị kết thúc.

Giải quyết vấn đề bằng cách sử dụng Đệ quy

Trong nhiều trường hợp, a Bài toán có thể được chia thành các bài toán con nhỏ hơn trong đó mỗi bài toán con có cách giải quyết tương tự nhau. Vì vậy, một bài toán được chia thành bài toán con nhỏ nhất và một trường hợp cơ sở cũng được cung cấp để phá vỡ đệ quy. Bất cứ khi nào đệ quy đạt đến bài toán con nhỏ nhất, nó sẽ phá vỡ đệ quy. Có thể có nhiều trường hợp cơ bản trong hàm đệ quy.

Stack Overflow Error in Recursion

Hãy cho chúng tôi hiểu lỗi tràn ngăn xếp từ ví dụ được lấy ở trên, tức là, tìm tổng lên đến 20. Chúng tôi đã xác định điều kiện cơ sở; nếu giá trị của i bằng 1, thì nó trả về 1 và do đó đệ quy sẽ bị phá vỡ hoặc nếu không thì đệ quy vẫn tiếp tục. Điều gì sẽ xảy ra nếu chúng ta thay thế điều kiện cơ sở bằng mã sau:

 
  

// trường hợp cơ sở

nếu

(tôi ==

100

) {

trả lại

1

;

}

Sau khi thực thi chương trình sẽ hiển thị lỗi tràn ngăn xếp khi đệ quy không bao giờ đạt đến trường hợp cơ sở vì chúng tôi giảm giá trị của i đi 1 lần. Do đó, bộ nhớ bị cạn kiệt bởi các hàm này trên ngăn xếp và xảy ra lỗi.

Ví dụ về Đệ quy trong Java

1. Đệ quy vô hạn

Đệ quy vô hạn chỉ xảy ra khi trường hợp cơ sở không đạt được hoặc không được xác định. Trong những trường hợp như vậy, các lệnh gọi đệ quy được thực hiện cho chính chúng và điều này dẫn đến lỗi tràn ngăn xếp.

 
  

class

Scaler

{

tĩnh

khoảng trống

in

< p> ()

{

System.out.print (

"Scaler"

);

print (); }

công khai

tĩnh

vô hiệu

main

(Chuỗi [] args)

{

print (); } }

Đầu ra

Giải thích

Khi chúng ta gọi hàm print, nó sẽ liên tục gọi chính nó vì không có trường hợp cơ sở nào được áp dụng và do đó nó chạy vô hạn. < / p>

2. Chương trình số Palindrome

Số Palindrome: Xét một số x. Nếu đảo ngược số, thì giá trị của số đó sẽ không đổi. Ví dụ 1234321 là số palindrome vì nếu chúng ta đảo ngược nó sẽ tạo ra cùng một số, nhưng 2331 không phải là số palindrome vì đảo ngược nó sẽ tạo ra 1332, không giống nhau.
Hãy để chúng tôi xem một chương trình để kiểm tra xem số có phải là palindrome hay không bằng cách sử dụng đệ quy trong Java.

 
  

class

Scaler

{

tĩnh

boolean

checkPalindrome

< p> (Chuỗi s,

int

trái,

int

phải)

{

// điều kiện cơ bản là bộ đếm bên trái lớn hơn bên phải thì nó là palindrome

nếu

(trái & gt; = phải) {

trả lại

true

;

}

// là hai chữ số không bằng nhau thì trả về false

if

(s.charAt (trái)! = s.charAt (phải)) {

trả về

sai

;

}

// thực hiện cuộc gọi đệ quy

trả lại

checkPalindrome (s, trái +

1

, phải-

< p> 1

);

}

tĩnh

khoảng trống

palindrome

(< / p>

int

a)

{

// chuyển đổi số thành chuỗi

String s = Integer.toString (a);

// độ dài của chuỗi

int

n = s.length ();

// gọi hàm đệ quy

nếu

(checkPalindrome,

0

, n-

< p> 1

)) {

System.out.println (

"Số"

+ a +

"là palindrome"

);

}

khác

{

System.out.println (

"Số"

+ a +

"không phải là palindrome"

< p>);

} }

công khai

tĩnh

vô hiệu

main

(Chuỗi [] args)

{

palindrome (

1235321

);

palindrome (

12101201

);

} }

Đầu ra

 
  

& gt; Số

1235321

là palindrome

& gt; Con số

12101201

không phải là palindrome

Giải thích

Trong ví dụ trên, đầu tiên chúng ta lấy một số và chuyển nó vào một hàm gọi là palindrome. Chúng tôi đã chuyển đổi một số nguyên thành một chuỗi trong hàm palindrome. Bây giờ chúng ta chuyển chuỗi vào hàm checkPalindrome. CheckPalindrome nhận ba đối số, tức là chuỗi, con trỏ trái và con trỏ phải. Kiểm tra hàm đệ quyPalindrome duyệt chuỗi từ cả hai phía, từ trái và phải. Chúng tôi cung cấp hai trường hợp cơ bản.

Trường hợp cơ sở đầu tiên: Nếu con trỏ bên trái có giá trị lớn hơn hoặc bằng giá trị của con trỏ bên phải, ngụ ý rằng chúng tôi đã đi ngang đến giữa của chuỗi và chuỗi là một palindrome. Do đó, chúng tôi trả về giá trị true cho hàm đệ quy.

Trường hợp cơ sở thứ hai: Nếu tại bất kỳ điểm nào s [left] không bằng s [right], thì chúng tôi trả về false bởi vì số sẽ không phải là palindrome vì phần bên trái không giống phần bên phải.
Nếu bỏ qua cả hai trường hợp cơ sở, nó sẽ thực hiện một cuộc gọi đệ quy. Mỗi khi chúng ta thực hiện đệ quy, chúng ta sẽ giảm con trỏ bên phải đi 1 và tăng con trỏ bên trái lên 1.

3. Chương trình số giai thừa

Giai thừa: Giai thừa của một số n bất kỳ là tích của tất cả các số từ 1 đến n. Ví dụ: giai thừa của một số 5 sẽ là tích của 1,2,3,4,5, tức là 120. (có thể viết là 5! = 120)
Hãy để chúng tôi viết một chương trình để tìm giai thừa của một số bằng cách sử dụng đệ quy trong Java.

 
  

class

Scaler

{

tĩnh

int

giai thừa

< p> (

int

n)

{

// trường hợp cơ sở

nếu

(n ==

0

) {

trả lại

1

;

}

// gọi hàm đệ quy

return

n * giai thừa (n-

1

);

}

công khai

tĩnh

vô hiệu

chính

(Chuỗi [] args)

{

System.out.println (

"Giai thừa của số 7 là:"

+ giai thừa (

7

>

));

} }

Đầu ra

 
  

& gt; Giai thừa của số

7

là:

5040

Giải thích

Trong đoạn mã trên, giai thừa của hàm đệ quy nhận một số nguyên làm tham số. Trường hợp cơ sở cho hàm giai thừa là: nếu giá trị của n bằng 0, thì trả về 1. Nếu giá trị của n không phải là 0, thì gọi đệ quy giai thừa và giảm giá trị của n đi 1. Chúng ta đang trả về n * giai thừa (n-1) vì giai thừa của một số x sẽ là tích của x và giai thừa của x-1. x = x * (x-1)! (! biểu thị giai thừa).

4. Chương trình chuỗi Fibonacci

Chuỗi Fibonacco: Nếu F (n) biểu thị số Fibonacci thứ n thì F (n) có thể được viết là F (n-1) + F (n- 2).
Hãy để chúng tôi hiểu chuỗi Fibonacci bằng một ví dụ. Gọi hai số hạng đầu tiên của dãy Fibonacci là 1 và 1. Số hạng thứ ba sẽ là tổng các số hạng trước đó theo định nghĩa tiêu chuẩn. Vì vậy, số hạng thứ ba sẽ là 1 + 1 = 2. Theo cách này, mô hình sẽ được tiếp tục. Hình ảnh sau đây sẽ cho thấy làm thế nào để tính toán các điều khoản tiếp theo.

 
  

class

Mở rộng quy mô

{

tĩnh

int

fibonacci

< p> (

int

n)

{

// trường hợp cơ sở

nếu

(n & lt; =

1

) {

trở lại

n;

}

// như định nghĩa f (n) = f (n-1) + f (n-2) của số fibonacci

trả về

fibonacci (n-

1

) + fibonacci (n -

2

);

}

công khai

tĩnh

vô hiệu

main

(Chuỗi [] args)

{

System.out.print (

"Chuỗi Fibonacci là:"

);

cho

(

int

i =

0

; i & lt; =

15

; i ++) {

// lấy từng thuật ngữ fibonacci bằng hàm đệ quy

System.out.print (fibonacci (i) +

""

);

} } }

Đầu ra

 
  

& gt; Chuỗi Fibonacci là:

0

1

< p>

1

2

3

5

8

13

21

34

55

89

< p>

144

233

377

610

Giải thích

Trong đoạn mã trên, hàm đệ quy fibonacci nhận một số nguyên làm tham số. Trường hợp cơ bản cho hàm fibonacci là: nếu giá trị của n lớn hơn hoặc bằng 0, thì trả về n. Nếu giá trị của n không phải là 0, thì hãy gọi hàm fibonacci một cách đệ quy. Chúng tôi gọi hàm đệ quy theo cách “fibonacci (n-1) + fibonacci (n-2)” vì F (n) = F (n-1) + F (n-2) .

5. Tìm kiếm nhị phân sử dụng Đệ quy

Tìm kiếm nhị phân là thuật toán tìm kiếm có độ phức tạp về thời gian ít nhất trong số tất cả các thuật toán tìm kiếm. Cho một mảng đã sắp xếp. Nếu phần tử có trong mảng, chúng ta phải trả về chỉ số của phần tử từ mảng hoặc nếu không thì trả về -1.

Trong thuật toán tìm kiếm nhị phân, chúng ta chia mảng thành hai. Kiểm tra xem phần tử ở giữa có lớn hơn phần tử đích hay không; nếu vậy, chỉ cần tiếp tục tìm kiếm ở nửa bên phải của mảng. Nếu phần tử ở giữa nhỏ hơn phần tử chính, chúng ta tiếp tục tìm kiếm ở nửa bên trái của mảng. Vì vậy, tổng độ phức tạp của thuật toán tìm kiếm nhị phân là nlog (n) (n là kích thước của một mảng đã được sắp xếp). Độ phức tạp thời gian sẽ là logarit vì sau mỗi lần gọi đệ quy, chúng ta loại bỏ một nửa mảng.

 
  

class

Scaler

{

tĩnh

int

Tìm kiếm nhị phân

< p> (

int

arr [],

int

l,

int

r,

int

num)

{

nếu

(l & lt; = r) {

int

mid = l + (r - l) /

2

;

// điều kiện cơ sở nếu arr [mid] bằng phần tử chính

nếu

(arr [mid] == num) {

trở lại

giữa;

}

else

if

(arr [mid] & gt; num) {

// nếu arr [mid] lớn hơn tìm kiếm phần tử chính ở nửa bên trái

return

binarySearch (arr, l, mid-

1

, num);

}

khác

{

// nếu arr [mid] nhỏ hơn tìm kiếm phần tử chính ở nửa bên phải

return

binarySearch (arr, mid +

1

, r, num);

} }

// điều kiện cơ sở nếu con trỏ trái & gt; con trỏ bên phải

trả lại

-

1

;

}

tĩnh

void

trình trợ giúp

(< / p>

int

num,

int

n,

int

arr [ ])

{

// gọi hàm đệ quy

int

x = binarySearch (arr,

0

, n-

1

, num);

nếu

(x == -

1

) {

// nếu số không có trong mảng

System.out.println (

"Số"

+ num +

"không có trong mảng"

);

}

khác

{

// nếu số có trong mảng

System.out.println (

"Chỉ số của số"

+ num +

"là:"

+ x);

} }

công khai

tĩnh

vô hiệu

main

(Chuỗi [] args)

{

// khai báo một mảng

int

arr [] = {

1

,

4

,

5

,

9

,

10 < / p>

,

15

,

16

,

18

,

20

,

26

,

30

< p>,

47

,

78

};

int

n = arr.length;

// in một mảng

System.out.print (

"Mảng:"

);

cho

(

int

i =

0

; i & lt; n; i ++) {

System.out.print (arr [i] +

""

);

}

System.out.println (

""

);

// gọi hàm trợ giúp

người trợ giúp (

18

, n, arr);

người trợ giúp (

21

, n, arr);

} }

Đầu ra

 
  

& gt; Mảng:

1

4

5

9

10

15

16

18

20 < / p>

26

30

47

78

Chỉ số của số

18

là:

7

Số

21

không có trong mảng

Giải thích

Trong đoạn mã trên, hàm Tìm kiếm nhị phân nhận bốn tham số, tức là mảng, con trỏ trái (l), con trỏ phải (r) và phần tử khóa (num).

Có hai điều kiện cơ bản cho chúng như sau:

  1. Nếu con trỏ bên trái lớn hơn con trỏ bên phải, hàm trả về

    – 1

    (Nó ngụ ý rằng phần tử quan trọng không được tìm thấy trong mảng). < / li>

  2. Nếu

    arr [mid]

    bằng với phần tử chính thì trả về giữa (Điều này ngụ ý rằng phần tử chính có trong mảng).

Nếu hai điều kiện cơ sở không thành công, thì chúng tôi sẽ so sánh phần tử khóa với arr [mid] (mid = l + (r – l) / 2). Nếu arr [mid] lớn hơn phần tử khóa, chúng tôi sẽ thực hiện lệnh gọi đệ quy cho nửa bên trái của mảng và nếu nó nhỏ hơn, nó sẽ thực hiện lệnh gọi đệ quy cho nửa bên phải của mảng.

< h2 id = "styles-of-recursion"> Các loại đệ quy

Có hai loại đệ quy dựa trên thời điểm gọi đệ quy tới hàm.

1. Đệ quy đuôi

Khi câu lệnh cuối cùng trong phương thức đệ quy là lệnh gọi đệ quy cho hàm đó, nó được gọi là đệ quy đuôi. Không có thực thi thêm bất kỳ mã nào sau khi gọi hàm đệ quy.
Lệnh gọi đệ quy cùng với hàm thường được thực hiện cùng với câu lệnh trả về.

Cú pháp cho đệ quy đuôi trong Java:

 
  

class

Scaler

{

method (params) {

// điều kiện cơ sở

nếu

(điều kiện cơ bản) {

giá trị trả về

;

}

// phương thức đệ quy được gọi sau cùng

return

phương thức (params);

} }

Trong bài viết trên, chương trình của chuỗi fibonacci là một ví dụ về đuôi đệ quy.

2. Đệ quy đầu

Nói chung, bất kỳ cách tiếp cận đệ quy nào không phải là đệ quy đuôi đều có thể được gọi là đệ quy đầu. Nói cách khác, hàm đệ quy không phải thực hiện bất kỳ hoạt động nào tại thời điểm gọi, nó sẽ thực hiện tất cả các hoạt động tại thời điểm trả về.

Cú pháp cho đệ quy đầu trong Java:

 
  

class

< / p>

Mở rộng quy mô

{

method (params) {

// điều kiện cơ sở

nếu

(điều kiện cơ bản) {

// phương thức đệ quy bên trong điều kiện cơ sở

return

phương thức (params);

}

giá trị trả về

;

} }

Trong bài viết trên, chương trình tìm kiếm nhị phân là một ví dụ về đầu đệ quy.

Ưu điểm của đệ quy

  • Đệ quy giảm việc gọi một hàm không cần thiết.
  • Viết các phương pháp tiếp cận lặp lại là một nhiệm vụ khá khó khăn vì nó đòi hỏi phải thực hiện nhiều, trong khi các phương pháp tiếp cận đệ quy là rất nhỏ để viết mã.
  • Nó rất hữu ích trong các kỹ thuật duyệt (Độ sâu để tìm kiếm, Độ rộng cho tìm kiếm, Inorder / Postorder / Đặt hàng trước cây duyệt, v.v.) khi khó thực hiện lặp lại thông thường.

Nhược điểm của Đệ quy

  • Rất khó theo dõi đệ quy, đó là lý do tại sao rất khó gỡ lỗi.
  • Đệ quy sử dụng nhiều bộ nhớ ngăn xếp cũng như thời gian của bộ xử lý.
  • Máy có thể hết bộ nhớ nếu các lệnh gọi đệ quy không được ghi đúng cách.
  • Thật khó để hiểu mã, vì hình dung nó là một nhiệm vụ lớn.

Kết luận

  • Đệ quy là kỹ thuật gọi chính nó lặp đi lặp lại.
  • Cần phải chứng minh một trường hợp cơ sở để sử dụng các hàm đệ quy, nếu không, nó sẽ chạy vô hạn.
  • Đây là một khái niệm quan trọng trong khi thiết kế các thuật toán không phân biệt ngôn ngữ lập trình.
  • Nó chủ yếu được sử dụng để giải quyết các vấn đề như tower of hanoi, DFS, BFS, v.v.
  • Nó được sử dụng rất nhiều trong lập trình động trong khi ghi nhớ.
  • Đệ quy chiếm nhiều bộ nhớ và thời gian, làm cho mã trở nên đơn giản và dễ dàng hơn.


Xem thêm những thông tin liên quan đến chủ đề đệ quy trong java là gì

Thuật toán ĐỆ QUY trong lập trình là gì – Ví dụ tính Giai thừa – Fibonaccy | Unitop.vn

  • Tác giả: Phan Văn Cương [Học Web Online]
  • Ngày đăng: 2019-06-25
  • Đánh giá: 4 ⭐ ( 4366 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Đệ quy là một giải thuật rất hay trong lập trình, trong video này tôi chia sẻ đến bạn giải thuật đệ quy bao gồm khái niệm và ví dụ cụ thể để bản nắm được bản chất của nó.

    Nhận nhiều video chia sẻ sắp tới tại: http://bit.ly/2RMvXez
    Nhận lộ trình học đi làm: http://hocweb90ngay.com

    ————
    KẾT NỐI VỚI CƯƠNG
    Blog: http://phanvancuong.com
    Fanpage: https://facebook.com/cuongunitop
    Fb: https://facebook.com/cuongtienlen

    ————————–
    ĐĂNG KÝ HỌC LẬP TRÌNH WEB ĐI LÀM
    http://hocweb.unitop.vn
    http://unitop.vn

Đệ quy là gì? Những điều cơ bản về đệ quy mà bạn nên biết!

  • Tác giả: abcdonline.vn
  • Đánh giá: 5 ⭐ ( 9837 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Đệ quy là gì? Câu hỏi hỏi này được rất nhiều bạn học quan tâm tìm hiểu. Thực chất, đệ quy đang được sử dụng phổ biến trong lập trình hiệu quả.

Đệ quy trong Java (bất kỳ ngôn ngữ lập trình nào)

  • Tác giả: teamvietdev.com
  • Đánh giá: 5 ⭐ ( 9229 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

reverse List trong Java sử dụng đệ quy

  • Tác giả: viblo.asia
  • Đánh giá: 3 ⭐ ( 4466 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nếu bạn đã từng cần phải reverse một List trong Java, chắc hẳn bạn đã nghe đến phương thức Collections.reverse(). Điều đầu tiên, mình lưu ý là nên sử dụng phương thức này cho các trường hợp mà bạn cần…

Lập Trình Từ Đầu

  • Tác giả: laptrinhtudau.com
  • Đánh giá: 4 ⭐ ( 1584 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Đệ quy trong Java – Lập Trình Từ Đầu 5 Hàm-Phương Thức Trong JAVA

Đệ Quy Siêu Cơ Bản Cho Người Mới Bắt Đầu

  • Tác giả: codelearn.io
  • Đánh giá: 4 ⭐ ( 4008 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Đệ quy là một khái niệm khá cơ bản trong lập trình, bài viết này mình sẽ giải thích về đệ quy và những khái niệm liên quan đến nó nhé.

Đệ quy đuôi (Tail Recursion)

  • Tác giả: freetuts.net
  • Đánh giá: 5 ⭐ ( 6836 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Giới thiệu đệ quy đuôi (Tail Recursion) trong lập trình, đây là một hàm đệ quy cơ bản và được sử dụng khá nhiều khi học giải thuật và cấu trúc dữ liệu

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Hệ thống tệp Node.js - fs trong nút js là gì

By ads_php