Đệ quy - Short Flashcards

1
Q

Khái niệm về hàm đệ quy

một hàm đệ quy được định nghĩa là một hàm tự gọi chính nó như là một phần trong quá trình thực thi của nó.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Khái niệm về thủ tục đệ quy (mình nghĩ từ này không quan trọng)

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

0:05
» DOUG LLOYD: Bạn có thể nghĩ rằng mã chỉ được sử dụng để hoàn thành một nhiệm vụ.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

> > Nhưng tin hay không tùy bạn, nếu bạn viết mã trong một thời gian dài,
0:17
bạn thực sự có thể coi mã là thứ gì đó đẹp đẽ.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Nó giải quyết vấn đề theo một cách rất thú vị,
0:23
hoặc chỉ có một cái gì đó thực sự gọn gàng về hình thức (của mã code) của nó.
0:26 Bạn có thể đang cười nhạo tôi, nhưng đó là sự thật.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Và đệ quy là một cách để có được ý tưởng
0:31
về mã đẹp, thanh lịch này.
Nó giải quyết các vấn đề theo những cách thú vị, dễ hình dung,
0:37
và ngắn đến bất ngờ.

A

Vậy đệ quy chỉ là 1 cách để làm cho mã đẹp và thanh lịch à.

Cái này lưu trữ những ưu điểm của đệ quy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

0:53 Nhưng một lần nữa, các thủ tục đệ quy này
0:55 sẽ rất thanh lịch bởi vì chúng sẽ
0:57 giải quyết vấn đề này mà không cần có tất cả các hàm khác
1:00 hoặc những vòng lặp dài này.

A

ưu điểm của đệ quy và (có thể) định nghĩa của từ thanh lịch đối với mã

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Chúng ta có thể mô tả việc triển khai một thuật toán là đặc biệt “sang trọng” nếu nó giải quyết vấn đề theo cách vừa thú vị vừa dễ hình dung.
Kỹ thuật đệ quy là một cách rất phổ biến để thực hiện một giải pháp “thanh lịch” như vậy.
Định nghĩa của một hàm đệ quy là một hàm gọi chính nó như là một phần của quá trình thực thi nó.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Hàm giai thừa (n!) được xác định trên mọi số nguyên dương.
n! bằng tất cả các số nguyên dương nhỏ hơn hoặc bằng n, nhân với nhau.
Suy nghĩ về mặt lập trình, chúng ta sẽ xác định hàm toán học n! như fact(n).

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

fact(1) = 1
fact(2) = 2 * 1
fact(3) = 3 * 2 * 1
fact(4) = 4 * 3 * 2 * 1
fact(5) = 5 * 4 * 3 * 2 * 1

fact(1) = 1
fact(2) = 2 * fact(1)
fact(3) = 3 * fact(2)
fact(4) = 4 * fact(3)
fact(5) = 5 * fact(4)

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

fact(n) = n * fact(n - 1)

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Điều này tạo cơ sở cho một định nghĩa đệ quy của hàm giai thừa.
Mọi hàm đệ quy đều có hai trường hợp có thể áp dụng, với bất kỳ đầu vào nào.
Trường hợp cơ sở, khi được kích hoạt sẽ chấm dứt quá trình đệ quy.
Trường hợp đệ quy, đó là nơi đệ quy sẽ thực sự xảy ra.

A

Tìm định nghĩa

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

int fact(int n)
{
// base case

// recursive case }

int fact(int n)
{
if (n == 1)
{
return 1;
}

// recursive case }

int fact(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * fact(n - 1);
}
}

int fact(int n)
{
if (n == 1)
return 1;
else
return n * fact(n - 1);
}

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

call stack là đang chờ kết quả

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Trường hợp nhiều cơ số: Dãy số Fibonacci được xác định như sau:
Phần tử đầu tiên là 0.
Phần tử thứ hai là 1.
Phần tử thứ n là tổng của phần tử thứ (n-1) và thứ (n-2).

Nhiều trường hợp đệ quy: Phỏng đoán Collatz.

A

Nhiều trường hợp đệ quy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Đệ quy: mã(code không phải mẫu mã) đẹp, thanh lịch, công cụ mạnh

A
17
Q

bởi vì bạn sẽ có thể tạo các chương trình khá thú vị bằng cách sử dụng đệ quy
13:41
điều đó có thể phức tạp để viết nếu bạn đang sử dụng các vòng lặp và phép lặp.

A

sử dụng các vòng lặp và phép lặp

18
Q

Giả thuyết Collatz được áp dụng cho các số nguyên dương và suy đoán rằng luôn có thể “quay lại 1” nếu bạn làm theo các bước sau:
Nếu n bằng 1 thì dừng.
Ngược lại, nếu n chẵn, lặp lại quá trình này với n/2.
Ngược lại, nếu n là số lẻ, lặp lại quá trình này trên 3n + 1.
Viết hàm đệ quy collatz(n) tính xem cần bao nhiêu bước để lên 1 nếu bạn bắt đầu từ n và lặp lại như đã nêu ở trên.

A
19
Q

int collatz(int n)
{
// base case
if (n == 1)
return 0;
// even numbers
else if ((n % 2) == 0)
return 1 + collatz(n / 2);
// odd numbers
else
return 1 + collatz(3 * n + 1);
}

A