Có giới hạn đệ quy trong python không?

Hướng dẫn này thảo luận ý nghĩa của lỗi này và tại sao lỗi này lại quan trọng. Chúng tôi sẽ xem qua một ví dụ về lỗi này để bạn có thể tìm hiểu cách khắc phục nó trong chương trình của mình

Có giới hạn đệ quy trong python không?
Có giới hạn đệ quy trong python không?

Tìm trận đấu Bootcamp của bạn

  • Career Karma kết hợp bạn với các bootcamp công nghệ hàng đầu
  • Truy cập học bổng độc quyền và các khóa học chuẩn bị
Chọn sở thích của bạn
Tên đầu tiên

Họ

E-mail

Số điện thoại


Bằng cách tiếp tục, bạn đồng ý với Điều khoản dịch vụ và Chính sách quyền riêng tư của chúng tôi và bạn đồng ý nhận các ưu đãi và cơ hội từ Career Karma qua điện thoại, tin nhắn văn bản và email

độ sâu đệ quy tối đa vượt quá so với

Hàm đệ quy là hàm gọi chính nó để tìm lời giải cho chương trình

Các hàm đệ quy được viết tốt bao gồm các giới hạn để đảm bảo chúng không thực thi vô hạn. Điều này có thể có nghĩa là một chức năng chỉ nên chạy cho đến khi một điều kiện cụ thể được đáp ứng

Nếu bạn viết một hàm đệ quy thực thi nhiều hơn một số lần lặp cụ thể (thường là 997), bạn sẽ thấy lỗi khi chuyển sang lần lặp tiếp theo

Điều này là do Python giới hạn độ sâu của thuật toán đệ quy. Điều này đề cập đến số lần chức năng có thể gọi chính nó

Bạn có thể xem giới hạn đệ quy trong trình bao Python của mình bằng mã này

import sys
print(sys.getrecursionlimit())

Một kịch bản ví dụ

Hãy viết một hàm đệ quy tính toán một số trong Dãy Fibonacci. Trong dãy Fibonacci, số tiếp theo trong dãy là tổng của hai số cuối. Hai số đầu tiên trong dãy là 0 và 1

Đây là một hàm đệ quy tính toán dãy Fibonacci

def fibonacci(n):
	if n <= 1:
		return n
	else:
		return(fibonacci(n-1) + fibonacci(n-2))

Nếu số chúng tôi chỉ định nhỏ hơn hoặc bằng 1, số đó sẽ được trả về. Nếu không, chương trình của chúng tôi sẽ tính toán số tiếp theo trong chuỗi

» THÊM.   Mô-đun Python. Cách tạo mô-đun

Tiếp theo, chúng ta sẽ gọi hàm của chúng ta

print(fibonacci(5000))

Mã này tính toán số sau số thứ 5.000 trong Dãy Fibonacci. Hãy chạy mã của chúng tôi và xem điều gì sẽ xảy ra

Traceback (most recent call last):
  File "main.py", line 7, in 
	print(recur_fibo(5000))
  File "main.py", line 5, in recur_fibo
	return(recur_fibo(n-1) + recur_fibo(n-2))
… 
  File "main.py", line 2, in recur_fibo
	if n <= 1:
RecursionError: maximum recursion depth exceeded in comparison

Mã của chúng tôi trả về một thông báo lỗi dài. Tin nhắn này đã được rút ngắn cho ngắn gọn

Giải pháp

Python đã đưa ra một lỗi đệ quy để bảo vệ chúng ta khỏi lỗi tràn ngăn xếp. Đây là khi con trỏ trong ngăn xếp vượt quá giới hạn ngăn xếp. Nếu không có lỗi này, chương trình của chúng tôi sẽ cố gắng sử dụng nhiều dung lượng bộ nhớ hơn mức có sẵn

Chúng ta có thể khắc phục lỗi này bằng cách lặp lại trình tự hoặc bằng cách tăng giới hạn đệ quy trong chương trình của chúng ta

Giải pháp số 1. Sử dụng thuật toán lặp

Chúng ta có thể thay đổi chương trình của mình để sử dụng phương pháp lặp thay vì phương pháp đệ quy

to_calculate = 5
i = 0
next = 1
current = 1
last = 0

while i < to_calculate:
	next = current + last
	current = last
	last = next
	i += 1

Mã này tính toán năm số đầu tiên trong Dãy Fibonacci. Chúng tôi có thể tăng số lượng giá trị mà chúng tôi tính toán nhưng điều đó cũng sẽ làm tăng thời gian cần thiết để chương trình của chúng tôi thực thi. chương trình của chúng tôi trở lại

1

1

2

3

5

Cách tiếp cận này bỏ qua lỗi đệ quy vì chúng tôi không sử dụng hàm đệ quy. Thay vào đó, chúng tôi sử dụng vòng lặp while để tính số tiếp theo trong danh sách

Giải pháp số 2. Tăng giới hạn đệ quy

Bạn có thể ghi đè giới hạn đệ quy mặc định mà Python đặt bằng phương thức setrecursionlimit()

import sys
sys.setrecursionlimit(5000)

Mã này đặt độ sâu đệ quy tối đa là 5.000. Bạn nên cẩn thận khi sử dụng phương pháp này vì nó có thể gây tràn ngăn xếp tùy thuộc vào tài nguyên có sẵn cho trình thông dịch Python

» THÊM.   __init__ là gì. py?. Hướng dẫn

Nói chung, tốt nhất là viết lại một hàm để sử dụng cách tiếp cận lặp thay vì tăng giới hạn đệ quy

Có giới hạn đệ quy trong python không?
Có giới hạn đệ quy trong python không?

"Career Karma bước vào cuộc đời tôi khi tôi cần nó nhất và nhanh chóng giúp tôi phù hợp với bootcamp. Hai tháng sau khi tốt nghiệp, tôi đã tìm được công việc mơ ước phù hợp với giá trị và mục tiêu của mình trong cuộc sống. "

Venus, Kỹ sư phần mềm tại Rockbot

Find Your Bootcamp Match

Phần kết luận

Lỗi "vượt quá độ sâu đệ quy tối đa khi so sánh" xảy ra khi bạn cố thực thi một hàm vượt quá giới hạn đệ quy tích hợp sẵn của Python. Bạn có thể sửa lỗi này bằng cách viết lại chương trình của mình để sử dụng phương pháp lặp hoặc bằng cách tăng giới hạn đệ quy trong Python

Bây giờ bạn đã có kiến ​​thức cần thiết để khắc phục lỗi này như một chuyên gia



Về chúng tôi. Career Karma là một nền tảng được thiết kế để giúp người tìm việc tìm kiếm, nghiên cứu và kết nối với các chương trình đào tạo việc làm để thăng tiến trong sự nghiệp của họ. Tìm hiểu về ấn phẩm CK

Python có giới hạn đệ quy không?

Python có giới hạn đệ quy , độ sâu tối đa của ngăn xếp trình thông dịch Python. Nếu bạn yêu cầu đệ quy sâu, bạn cần đặt giới hạn cao hơn với các hàm trong mô-đun sys của thư viện chuẩn. Số lần truy cập cũng bị giới hạn bởi kích thước ngăn xếp.

Đệ quy có giới hạn không?

Giới hạn đệ quy là thường là 1000 .

Làm thế nào đệ quy vô hạn hoạt động trong Python?

Mọi hàm đệ quy phải có một điều kiện cơ bản để dừng đệ quy, nếu không hàm sẽ gọi chính nó vô tận . Trình thông dịch Python giới hạn độ sâu của đệ quy để giúp tránh các đệ quy vô hạn, dẫn đến tràn ngăn xếp. Theo mặc định, độ sâu đệ quy tối đa là 1000.