Chức năng đệ quy trong python có nghĩa là gì?

Hàm đệ quy trong Python được sử dụng để gọi lặp đi lặp lại cùng một hàm cho đến khi vòng lặp đạt đến giá trị mong muốn trong quá trình thực thi chương trình bằng cách sử dụng logic chia để trị. Một trong những nhược điểm rõ ràng của việc sử dụng hàm đệ quy trong chương trình Python là 'nếu việc lặp lại không phải là một luồng được kiểm soát, nó có thể dẫn đến việc tiêu thụ một phần bộ nhớ hệ thống. Để khắc phục sự cố này, có thể sử dụng vòng lặp điều kiện tăng dần thay cho hàm Đệ quy trong ngôn ngữ lập trình python

Hàm đệ quy trong Python

Khái niệm đệ quy vẫn giữ nguyên trong Python. Hàm gọi chính nó để chia vấn đề thành các vấn đề nhỏ hơn. Ví dụ đơn giản nhất mà chúng ta có thể nghĩ về đệ quy là tìm giai thừa của một số

Giả sử chúng ta cần tìm giai thừa của số 5 => 5. (Vấn đề của chúng ta)

Để tìm 5. vấn đề có thể được chia thành những vấn đề nhỏ hơn 5. => 5 x 4

Bắt đầu khóa học phát triển phần mềm miễn phí của bạn

Phát triển web, ngôn ngữ lập trình, kiểm thử phần mềm và những thứ khác

Gói phát triển phần mềm tất cả trong một(hơn 600 khóa học, hơn 50 dự án)

Chức năng đệ quy trong python có nghĩa là gì?
Chức năng đệ quy trong python có nghĩa là gì?
Chức năng đệ quy trong python có nghĩa là gì?
Chức năng đệ quy trong python có nghĩa là gì?

Chức năng đệ quy trong python có nghĩa là gì?
Chức năng đệ quy trong python có nghĩa là gì?
Chức năng đệ quy trong python có nghĩa là gì?
Chức năng đệ quy trong python có nghĩa là gì?

Giá
Xem các khóa học

Hơn 600 khóa học trực tuyến. hơn 50 dự án. Hơn 3000 giờ. Giấy chứng nhận có thể kiểm chứng. Truy cập trọn đời
4. 6 (86.754 xếp hạng)

Vì vậy, để có được 5. Ta cần tìm 4. và nhân nó với 5

Hãy tiếp tục phân chia vấn đề

5. = 4. x 5

4. = 3. x 4

3. = 3 x 2

2. = 2 x 1

1. = 1

Khi nó đạt đến đoạn nhỏ nhất, tôi. e. , lấy giai thừa của 1, chúng ta có thể trả về kết quả là

Hãy lấy một ví dụ mã giả. -

Thuật toán cho giai thừa

Chúng ta hãy xem thuật toán cho giai thừa

function get_factorial( n ):
    if n < 2:
        return 1
    else:
      return get_factorial(n -1)

lời gọi hàm

Giả sử chúng ta đang tìm giai thừa của 5

get_factorial(5)		5 * get_factorial(4)  = returns 120  #1st call
  get_factorial(4)	  4 * get_factorial(3) = returns 24 #2nd call
    get_factorial(3)	    3 * get_factorial(2) = returns 6 #3rd call
      get_factorial(2)     2 * get_factorial(1) = returns 2 #4th call
        get_factorial(1)	  returns 1  #5th call

Kết quả cuối cùng sẽ là 120, nơi chúng tôi bắt đầu thực hiện chức năng. Hàm đệ quy của chúng tôi sẽ dừng khi số lượng giảm đến mức có thể thu được kết quả

  • Cuộc gọi đầu tiên nhận giai thừa là 5, sẽ dẫn đến một điều kiện đệ quy trong đó nó sẽ được thêm vào ngăn xếp và một cuộc gọi khác sẽ được thực hiện sau khi giảm số lượng xuống còn 4
  • Đệ quy này sẽ tiếp tục gọi và chia vấn đề thành các phần nhỏ hơn cho đến khi nó đạt đến điều kiện cơ sở
  • Điều kiện cơ bản ở đây là khi số đó là 1
  • Mỗi hàm đệ quy có điều kiện đệ quy riêng và điều kiện cơ sở

Ưu và nhược điểm của Hàm đệ quy trong Python

  • Việc thực hiện đệ quy là để nó không thực hiện bất kỳ phép tính nào cho đến khi đạt đến điều kiện cơ sở
  • Khi đạt đến các điều kiện cơ bản, bạn có thể hết bộ nhớ
  • Có thể có một triệu bước trong một vấn đề lớn hoặc chúng ta có thể nói một triệu lần truy cập để thực hiện chương trình có thể dẫn đến lỗi bộ nhớ hoặc lỗi phân đoạn
  • 1000000. = 1000000 * 999999. =?
  • Đệ quy khác với phép lặp;
  • Các ngôn ngữ khác nhau có các tối ưu hóa khác nhau cho đệ quy
  • Trong nhiều ngôn ngữ, phương pháp lặp sẽ hoạt động tốt hơn phương pháp đệ quy
  • Mọi ngôn ngữ đều có một số hạn chế về độ sâu của đệ quy mà bạn có thể gặp phải khi giải các bài toán lớn
  • Đôi khi thật khó để hiểu những vấn đề phức tạp với đệ quy, trong khi nó khá đơn giản với phép lặp

Một số ưu điểm

  • Trong một số trường hợp, đệ quy là cách sử dụng thuận tiện và nhanh hơn
  • Rất hữu ích trong việc duyệt cây và tìm kiếm nhị phân

Mã Python – Đệ quy vs Lặp lại

Chúng tôi đã hiểu đệ quy là gì và cách nó hoạt động trong Python, vì chúng tôi biết rằng tất cả các ngôn ngữ đều có cách triển khai đệ quy khác nhau để tối ưu hóa bộ nhớ và tính toán. Có thể có trường hợp lặp lại sẽ nhanh hơn đệ quy

Ở đây chúng ta sẽ so sánh cả hai phương thức đệ quy và lặp để xem Python hoạt động như thế nào trong cả hai trường hợp

1. Mã đệ quy cho giai thừa

def get_recursive_factorial(n):
    if n < 0:
        return -1
    elif n < 2:                                     #base condition
        return 1
    else:
        return n * get_recursive_factorial(n -1)    #recursion condition

2. Bài toán giai thừa sử dụng phép lặp (looping)

def get_iterative_factorial(n):
    if n < 0:
        return -1
    else:
        fact = 1
        for i in range( 1, n+1 ):
            fact *= i
        return fact

3. Kết quả in

print(get_recursive_factorial(6))
print(get_iterative_factorial(6))

đầu ra

Chức năng đệ quy trong python có nghĩa là gì?

Như chúng ta có thể thấy, cả hai đều cho cùng một đầu ra vì chúng ta đã viết cùng một logic. Ở đây chúng ta không thể thấy bất kỳ sự khác biệt nào trong việc thực thi

Hãy thêm một số mã thời gian để có thêm thông tin về việc thực thi đệ quy và phép lặp trong Python

Chúng tôi sẽ nhập thư viện "thời gian" và kiểm tra thời gian đệ quy và lặp lại để trả về kết quả

4. Mã với tính toán thời gian

import time
def get_recursive_factorial(n):
    if n < 0:
        return -1
    elif n < 2:
        return 1
    else:
        return n * get_recursive_factorial(n-1)
def get_iterative_factorial(n):
    if n < 0 :
        return -1
    else:
        fact = 1
        for i in range(1, n+1): 
            fact *= i
        return fact
start_time = time.time()
get_recursive_factorial(100)
print("Recursion--- %s seconds ---" % (time.time() - start_time))
start_time = time.time()
get_iterative_factorial(100)
print("Iteration--- %s seconds ---" % (time.time() - start_time))

Chúng tôi sẽ thực hiện lặp lại các lần thực hiện với một giá trị khác cho giai thừa và xem kết quả. Các kết quả dưới đây có thể thay đổi từ máy này sang máy khác. Chúng tôi đã sử dụng MacBook Pro 16 GB RAM i7

Chúng tôi đang sử dụng Python 3. 7 để thực hiện

Trường hợp 1. - Giai thừa của 6

Chức năng đệ quy trong python có nghĩa là gì?

trường hợp 2. Thừa số của 50

Chức năng đệ quy trong python có nghĩa là gì?

trường hợp 3. Thừa số của 100

Chức năng đệ quy trong python có nghĩa là gì?

Trường hợp 4. Thừa số của 500

Chức năng đệ quy trong python có nghĩa là gì?

Trường hợp 5. Thừa số 1000

Chức năng đệ quy trong python có nghĩa là gì?
Chúng tôi đã phân tích cả hai phương pháp trong một vấn đề khác. Hơn nữa, cả hai đã thực hiện tương tự ngoại trừ trường hợp 4

Trong trường hợp 5, chúng tôi đã gặp lỗi khi thực hiện với đệ quy

Chức năng đệ quy trong python có nghĩa là gì?

Python có một hạn chế về độ sâu tối đa mà bạn có thể thực hiện với đệ quy, nhưng vấn đề tương tự tôi có thể giải quyết bằng phép lặp

Python có những hạn chế đối với vấn đề tràn. Python không được tối ưu hóa cho đệ quy đuôi và đệ quy không được kiểm soát gây ra lỗi tràn ngăn xếp

“hệ thống. hàm getrecursionlimit()” sẽ cho bạn biết giới hạn của đệ quy

Giới hạn đệ quy có thể được thay đổi nhưng không được khuyến nghị;

Kết luận – Hàm đệ quy Python

  • Đệ quy là một giải pháp hữu ích cho một số vấn đề như duyệt cây và các vấn đề khác
  • Python không phải là ngôn ngữ lập trình chức năng và chúng ta có thể thấy ngăn xếp đệ quy không được tối ưu hóa so với phép lặp
  • Chúng ta nên sử dụng phép lặp trong thuật toán của mình vì nó được tối ưu hóa hơn trong Python và mang lại cho bạn tốc độ tốt hơn

Bài viết được đề xuất

Đây là hướng dẫn về Hàm đệ quy trong Python. Ở đây chúng ta thảo luận về Hàm đệ quy là gì, hàm đệ quy trong Python, Thuật toán cho giai thừa, v.v. Bạn cũng có thể xem qua các bài viết được đề xuất khác của chúng tôi để tìm hiểu thêm–

Hàm đệ quy trong Python là gì?

Python cũng chấp nhận đệ quy hàm, nghĩa là một hàm đã xác định có thể gọi chính nó . Đệ quy là một khái niệm toán học và lập trình phổ biến. Nó có nghĩa là một chức năng gọi chính nó. Điều này có lợi là bạn có thể lặp qua dữ liệu để đạt được kết quả.

Hàm đệ quy nghĩa là gì?

Hàm đệ quy là hàm lặp lại hoặc sử dụng số hạng trước đó của chính nó để tính các số hạng tiếp theo và do đó tạo thành một chuỗi các số hạng . Thông thường, chúng ta tìm hiểu về hàm số này dựa trên dãy số-hình học, trong đó có các hạng tử có sự khác biệt chung giữa chúng.

Hàm đệ quy và ví dụ là gì?

Ví dụ kinh điển về lập trình đệ quy liên quan đến tính giai thừa . Giai thừa của một số được tính khi số đó nhân với tất cả các số bên dưới nó cho đến và bằng 1. Ví dụ: giai thừa(5) giống như 5*4*3*2*1 và ​​giai thừa(3) là 3*2*1.

Đệ quy trong Python giải thích bằng một ví dụ là gì?

Ví dụ về hàm đệ quy trong Python . Chúng tôi sẽ viết đoạn mã sau để có được câu trả lời. tổng xác định (n). nếu n <= 1. # trường hợp cơ bản trả lại n khác. # trường hợp tổng quát hoặc đệ quy and = sum(n - 1) return n + and print(sum(6)) Kết quả. 21