Trong Python đệ quy vòng lặp

Một chương trình máy tính bao gồm các hướng dẫn từng dòng. Máy tính thực hiện các lệnh đó theo từng dòng. Tuy nhiên, một số hướng dẫn có thể lặp đi lặp lại với một mẫu chung. Đệ quy hoặc phép lặp giúp một người viết một vài dòng mã để thực hiện các tác vụ lặp đi lặp lại như vậy. Giả sử một danh sách Python có các phần tử năm chuỗi. Chúng tôi muốn in các phần tử một trong một dòng. Hoạt động này cần năm dòng mã

Show
 flowers = ['lily', 'tulip', 'rose', 'lavender', 'dandelion'] 
 print(flowers[0])
 print(flowers[1])
 print(flowers[2])
 print(flowers[3])
 print(flowers[4]) 

đầu ra

Trong Python đệ quy vòng lặp

Có thể quan sát thấy rằng năm dòng mã theo cùng một mẫu. Sự khác biệt duy nhất trong mỗi dòng là chỉ mục của các phần tử danh sách. Nếu danh sách này chứa 100 hoặc 1000 phần tử thì sao? . Những loại vấn đề này được giải quyết thông qua phép lặp hoặc đệ quy. Ở đây, dạng lặp của các mã trên như sau

TUYỆT VỜI

Đăng ký hàng tuần của bạn về những gì đang xảy ra trong công nghệ mới nổi

E-mail

Đăng ký

 for flower in flowers:
   print(flower) 

đầu ra

Trong Python đệ quy vòng lặp

Hai dòng này là đủ để hoàn thành nhiệm vụ ngay cả khi danh sách chứa một triệu phần tử


Tải xuống ứng dụng di động của chúng tôi


Trong Python đệ quy vòng lặp
Trong Python đệ quy vòng lặp


Đệ quy trong Python

Đệ quy là một cách tiếp cận chức năng để chia nhỏ một bài toán thành một tập hợp các bài toán con đơn giản có mẫu giống hệt nhau và giải chúng bằng cách gọi một bài toán con bên trong một bài toán con khác theo thứ tự tuần tự. Đệ quy được thực hiện bằng cách xác định một hàm có thể giải một bài toán con tại một thời điểm. Ở đâu đó bên trong hàm đó, nó gọi chính nó nhưng giải một bài toán con khác. Do đó, cuộc gọi đến chính nó tiếp tục cho đến khi một số tiêu chí giới hạn được đáp ứng.  

Cuộc gọi đầu tiên đến hàm đệ quy từ chương trình chính sẽ chỉ được trả về sau khi tất cả các cuộc gọi phụ kết thúc. Do đó, Python lưu trữ kết quả của tất cả các bài toán con trong bộ nhớ tạm thời, thực hiện một số phép tính số học (nếu cần) và giải phóng bộ nhớ sau khi kết thúc đệ quy

Lặp lại trong Python

Các phép lặp được thực hiện thông qua các vòng lặp 'for' và 'while'. Lặp đi lặp lại thực hiện một tập hợp các hướng dẫn cho đến khi một số tiêu chí giới hạn được đáp ứng. Trái ngược với đệ quy, phép lặp không yêu cầu bộ nhớ tạm thời để lưu kết quả của mỗi lần lặp. Thay vào đó, các lập trình viên nên định nghĩa một biến (một số, hoặc danh sách, hoặc chuỗi hoặc bất kỳ loại dữ liệu có thể thay đổi nào) trước khi bắt đầu các lệnh gọi lặp để thu thập kết quả (nếu có các kết quả số học như vậy) trong mỗi lần lặp.  

Hơn nữa, một tác vụ lặp có thể được hoàn thành bằng vòng lặp 'for' hoặc vòng lặp 'while'. Vòng lặp 'for' lặp qua một chuỗi (chẳng hạn như danh sách, chuỗi, bộ và phạm vi). Nó kết thúc vòng lặp khi không còn phần tử nào trong dãy. Nó tự động đi qua các phần tử liên tiếp. Nhưng một vòng lặp 'trong khi' cần khởi tạo một trình vòng lặp và tăng thủ công giống nhau. Vòng lặp 'while' được thực thi cho đến khi thỏa mãn điều kiện dựa trên trình vòng lặp

Đệ quy vs Lặp lại

Vì Python không lưu trữ bất cứ thứ gì về các bước lặp trước đó, nên phép lặp khá nhanh hơn và tiết kiệm bộ nhớ hơn so với đệ quy. Trong thực tế, hầu như tất cả các phép lặp đều có thể được thực hiện bằng truy hồi và ngược lại. Một số tác vụ có thể được thực hiện bằng đệ quy đơn giản hơn lặp lại do gọi nhiều lần cùng một chức năng. Mặt khác, một số tác vụ có thể được thực hiện bằng phép lặp theo cách tao nhã hơn là đệ quy. Xét về độ phức tạp về thời gian và hạn chế về bộ nhớ, phép lặp được ưu tiên hơn đệ quy. Cả vòng lặp đệ quy và 'trong khi' trong lần lặp có thể dẫn đến tình huống cuộc gọi vô hạn nguy hiểm. Nếu tiêu chí giới hạn không được đáp ứng, vòng lặp while hoặc hàm đệ quy sẽ không bao giờ hội tụ và dẫn đến gián đoạn thực thi chương trình.  

Vì đệ quy được thực thi bằng cách định nghĩa một hàm, nên hàm này có thể được gọi bất cứ khi nào được yêu cầu ở bất kỳ đâu trong chương trình. Mã lặp phải được xây dựng tại địa điểm yêu cầu. Tuy nhiên, một bộ mã lặp có thể được khái quát hóa bằng cách khai báo bên trong một hàm Python điển hình (không phải hàm đệ quy)

Các ví dụ sau đây sẽ giúp hiểu rõ hơn về các phương pháp lập trình đệ quy và lặp lại

Giai thừa của một số nguyên

Tính giai thừa là một trường hợp sử dụng phổ biến để hiểu phép lặp và đệ quy. Chẳng hạn, chúng ta muốn tính giai thừa của 10. Nó có thể được xác định là 1*2*3*4*5*6*7*8*9*10 = 3628800. Có thể xem đây là 10 bài toán con nhân một số nguyên tăng dần thành kết quả cuối cùng

 # using a for loop
 n = 10
 result = 1
 for i in range(1,n+1):
   result *= i
 print(result) 

đầu ra

Trong Python đệ quy vòng lặp

Một hàm phạm vi được triển khai trong vòng lặp 'for' vì nó yêu cầu một chuỗi để lặp lại. Hàm phạm vi cung cấp các giá trị lặp đi lặp lại từ 1 đến 10, mỗi lần một giá trị. Nó dừng lặp lại khi hàm phạm vi ngừng cung cấp giá trị (i. e. , lúc 10)

 # using a while loop
 n = 10
 result = 1
 i = 1
 while i <= n:
   result *= i
   i += 1
 print(result) 

đầu ra

Trong Python đệ quy vòng lặp

Trong vòng lặp 'while', một trình lặp i được giới thiệu và tăng dần qua mỗi vòng lặp. Vòng lặp While dừng lặp khi giá trị của i vượt quá số nguyên 10

 # using recursion
 def Factorial(n):
   # declare a base case (a limiting criteria)
   if n == 1:
     return 1
   # continue with general case
   else:
     return n * Factorial(n-1)
 
 print(Factorial(10)) 

đầu ra

Trong Python đệ quy vòng lặp

Một hàm đệ quy, tên là Factorial(), được xác định với tiêu chí giới hạn là n=1. Đầu tiên nó cố gắng tìm giai thừa của 10. Giai thừa(10) được chia thành 10 * Giai thừa(9). Hơn nữa, Giai thừa(9) được chia thành 9 * Giai thừa(8), v.v. Khi Factorial(1) được gọi, nó dừng đệ quy.  

Trong Python đệ quy vòng lặp
Một vài bước trong phiên bản đệ quy của bài toán Giai thừa.  

Giai thừa(10) đang chờ giá trị của Giai thừa(9). Giai thừa (9) đang chờ giá trị của Giai thừa (8), v.v. Do đó, khi đạt đến tiêu chí giới hạn (ở đây, n=1), nó bắt đầu trả về các giá trị

Đảo ngược một chuỗi

Một chuỗi hoặc một chuỗi có thể được đảo ngược thông qua phép lặp hoặc đệ quy. Ở đây, chúng ta định nghĩa một hàm nhận vào một chuỗi và trả về dạng đảo ngược của nó thông qua cách tiếp cận lặp. Hàm này có thể được gọi bất kỳ số lần nào với các chuỗi khác nhau mỗi lần.  

 def Reverse_iter(s):
   rev = ''
   for k in s:
     rev = k + rev
   return rev

 Reverse_iter('Welcome!') 

đầu ra

Trong Python đệ quy vòng lặp

Nhiệm vụ tương tự được thực hiện thông qua cách tiếp cận đệ quy như sau

 def Reverse_rec(s):
   if not s:
     return ''
   else:
     return Reverse_rec(s[1:]) + s[0]

 Reverse_rec('Welcome!') 

đầu ra.  

Trong Python đệ quy vòng lặp

Xây dựng một hình tam giác với các con số

Tạo tam giác số bằng cách in 1 trên dòng đầu tiên, 1 nghìn trên dòng thứ hai, 1 triệu trên dòng thứ ba, v.v., cho đến khi đủ số dòng quy định. Sau khi xây dựng dòng dài, hãy giảm số chữ số theo thứ tự giảm dần. Tổng số dòng được in sẽ bằng 2n+1, trong đó n là số đầu vào

 # Iterative form
 n = 8
 # rise up
 for i in range(n):
   print(10**(3*i))
 # fall down
 for i in range(n, -1, -1):
   print(10**(3*i)) 

đầu ra

Trong Python đệ quy vòng lặp

Trong cấu trúc trên, vòng lặp đầu tiên in chuỗi tăng dần và vòng lặp thứ hai in chuỗi giảm dần. Điều tương tự có thể được thực hiện với hàm đệ quy như sau

________số 8

đầu ra.  

Trong Python đệ quy vòng lặp

Mặc dù thu được kết quả giống nhau thông qua cả cách tiếp cận lặp và đệ quy, nhưng cách tiếp cận đệ quy đi theo con đường khó khăn trong khi cách tiếp cận lặp đi theo con đường đơn giản. Đây là loại vấn đề mà cách tiếp cận đệ quy rất không được khuyến khích. Tuy nhiên, hiểu được đệ quy với loại vấn đề đơn giản này có thể giúp người ta hiểu được các thuật toán nâng cao chủ yếu dựa vào đệ quy, chẳng hạn như quay lui và lập trình động.

Sắp xếp nhanh chóng

Quicksort là một thuật toán nổi tiếng giúp sắp xếp danh sách hoặc mảng đã cho tại chỗ. Trên thực tế, phương thức sort() của Python tuân theo thuật toán này để sắp xếp. Hợp nhất sắp xếp và sắp xếp chèn là các thuật toán sắp xếp nổi tiếng khác. Quicksort sử dụng cả phương pháp đệ quy và lặp để thực hiện thao tác sắp xếp nhanh chóng và hiệu quả.  

Quicksort ban đầu chọn phần tử đầu tiên của mảng làm phần tử trục của nó. Nó lặp đi lặp lại so sánh phần tử trục với các phần tử kế tiếp và thực hiện dịch chuyển nếu phần tử bên phải cao hơn phần tử bên trái. Do đó, khi kết thúc quá trình lặp, phần tử trục có các phần tử nhỏ hơn ở bên trái và các phần tử lớn hơn ở bên phải. Tuy nhiên, cả phần tử bên trái và phần tử bên phải vẫn chưa được sắp xếp. Mảng hiện được chia thành hai phần dựa trên phần tử trục. Mảng bên trái và mảng bên phải được sắp xếp đệ quy bằng hàm Quicksort()

 def Quicksort(a, l, r):
   # consider the left most as pivot element
   current = l+1
   # base case (as limiting criteria)
   if r <= current:
     return None
   for i in range(l+1, r):
     # compare pivot element and shift current's postion
     if a[l] >= a[i]:
       a[i], a[current] = a[current], a[i]
       current += 1
   # exchange pivot element and current-but-one element
   a[l], a[current-1] = a[current-1], a[l]
   # perform Quicksort before current element
   Quicksort(a, l, current-1)
   # perform Quicksort after current element
   Quicksort(a, current, r) 
   return None 

Kiểm tra xem nó hoạt động như thế nào

 for flower in flowers:
   print(flower) 
0

đầu ra

Trong Python đệ quy vòng lặp

Nếu không có đệ quy, việc triển khai Quicksort này sẽ tốn nhiều công sức

Sổ tay Google Colab với cách triển khai mã ở trên

kết thúc

Trong bài viết này, chúng ta đã thảo luận về các cách tiếp cận lặp và đệ quy của lập trình Python với một vài ví dụ. Chúng tôi đã thảo luận về những hạn chế và hạn chế của cả hai phương pháp. Cuối cùng, chúng ta đã thảo luận về thuật toán Quicksort nổi tiếng kết hợp cả mô hình lặp và đệ quy để thực hiện sắp xếp mảng. Độc giả quan tâm có thể tham khảo các thuật toán sắp xếp khác, heap, tìm kiếm nhị phân, lập trình động và thuật toán quay lui để tìm hiểu cách thức các phép truy hồi và phép lặp được chọn hiệu quả cho một tác vụ cụ thể

Tài liệu tham khảo và đọc thêm

  • Đọc thêm về đệ quy
  • Đọc thêm về Iteration
  • Đọc thêm về thuật toán Quicksort
  • 7 thuật toán có thể trợ giúp trong cuộc phỏng vấn về khoa học dữ liệu của bạn

Hỗ trợ báo chí công nghệ độc lập

Nhận quyền truy cập không giới hạn với $3. 64 một tháng

$9. 99 $3. 64/tháng

Theo dõi ngay

Đã đăng ký?

Nhiều câu chuyện AIM tuyệt vời hơn

AI, Người hùng không thể sai lầm tại CES 2023

AI sáng tạo tham gia chơi game

Olympic phân tích do MachineHack tổ chức với Đại học Shiv Nadar đã kết thúc thành công

HDFC Limited được chứng nhận là Công ty tốt nhất cho các nhà khoa học dữ liệu

Đánh giá năm. Microsoft giữ không có Grouse chống lại 2022

Trong Python đệ quy vòng lặp

Một người đam mê Học máy với bằng Thạc sĩ Kỹ thuật và đam mê viết và khám phá những điều mới. Thích đọc tiểu thuyết, nấu ăn, tập võ và thỉnh thoảng viết tiểu thuyết và thơ

Trong Python đệ quy vòng lặp

Sự kiện sắp tới của AIM

Hội nghị trực tiếp (Bangalore)
Hội nghị thượng đỉnh dành cho các nhà phát triển máy học (MLDS) năm 2023
Ngày 19-20 tháng 1 năm 2023

Đăng ký

Early Bird Pass hết hạn vào ngày 3 tháng 2

Hội nghị trực tiếp (Bangalore)
Tăng 2023. Hội nghị Phụ nữ trong Công nghệ
16-17 tháng 3 năm 2023

Đăng ký

Hội nghị, trực tiếp (Bangalore)
Hội nghị thượng đỉnh về kỹ thuật dữ liệu (DES) 2023
ngày 27-28 tháng 4 năm 2023

Đăng ký

Hội nghị trực tiếp (Bangalore)
MachineCon 2023
Ngày 23 tháng 6 năm 2023

Đăng ký

Hội nghị, trực tiếp (Bangalore)
Cypher 2023
27-29 tháng 9 năm 2023

Đăng ký

3 cách để tham gia cộng đồng của chúng tôi

nhóm điện tín

Khám phá các ưu đãi đặc biệt, tin bài hàng đầu, sự kiện sắp tới, v.v.

Tham gia Telegram

Máy chủ bất hòa

Luôn kết nối với hệ sinh thái lớn hơn về khoa học dữ liệu và ML Professionals

Tham gia cộng đồng Discord

Theo dõi bản tin hàng ngày của chúng tôi

Nhận những câu chuyện và video tuyệt vời hàng ngày của chúng tôi trong hộp thư đến của bạn

Đặt mua

NHỮNG CÂU CHUYỆN HÀNG ĐẦU

Trong Python đệ quy vòng lặp

TensorFlow đấu với Pycaret. So sánh các khung học máy

Vì cả hai đều là những lựa chọn phổ biến khi triển khai mô hình ML, hãy xem cách chúng hoạt động và điều gì khiến chúng khác biệt với nhau

Trong Python đệ quy vòng lặp

Cây hành vi được sử dụng như thế nào trong học tăng cường?

Cây hành vi ban đầu được phát triển trong ngành công nghiệp trò chơi chủ yếu được sử dụng để thực hiện các hành động hoặc tập hợp các hành động theo cách quản lý. Chúng ta cũng có thể sử dụng cây này trong học tăng cường

Trong Python đệ quy vòng lặp

Phát triển Qubits, trái tim của máy tính lượng tử

Để cải thiện thời gian kết hợp của Qubit, các nhà nghiên cứu đang cố gắng tạo ra các vật liệu mới như Qubit siêu dẫn, v.v.

Trong Python đệ quy vòng lặp

Intel chiếm lĩnh thị trường bộ xử lý với Intel Core thế hệ thứ 12

Với dòng vi xử lý Intel Core thế hệ thứ 12, Intel tuyên bố đã giết chết sự cạnh tranh. Bài viết xem xét các tính năng mới mà bộ vi xử lý mới cung cấp

Trong Python đệ quy vòng lặp

Tiếp thị kỹ thuật số sẽ như thế nào trong metaverse?

Các metaverse lớn nhất hiện nay, bao gồm Fortnite và Roblox, mang đến cho các thương hiệu cơ hội

Trong Python đệ quy vòng lặp

Các môn tự chọn công nghệ cao để thúc đẩy sự nghiệp của bạn. Bằng MCA trực tuyến từ Jain (Đại học được coi là tương lai)

Chương trình MCA trực tuyến từ Jain (Đại học được coi là tương lai) đã được thiết kế để biến người học thành những chuyên gia sẵn sàng làm việc, với các môn tự chọn về Khoa học dữ liệu, Trí tuệ nhân tạo, Điện toán đám mây và Phát triển toàn bộ ngăn xếp

Trong Python đệ quy vòng lặp

Lời khuyên nghề nghiệp tốt nhất của các chuyên gia cho các nhà khoa học dữ liệu

Trong bài viết này, AIM yêu cầu các chuyên gia trong ngành chia sẻ hai xu của họ về cách cải thiện sự nghiệp của một nhà khoa học dữ liệu vào năm 2022

Trong Python đệ quy vòng lặp

bài hội đồng. Thiết kế hackathons để khuyến khích giải quyết vấn đề trong AI/ML

Theo báo cáo của QuantHub, 67% các công ty được khảo sát nói rằng

Trong Python đệ quy vòng lặp

Cử chỉ tay đang thay thế các hệ thống nhập liệu khác của máy tính như thế nào

Cử chỉ tay có thể được sử dụng để nhập liệu thay cho bàn phím và chuột để giúp bệnh nhân đột quỵ bị liệt một phần có thể tiếp cận máy tính

Tôi có thể sử dụng vòng lặp while trong đệ quy không?

Vòng lặp while về bản chất có phải là đệ quy không? . Các hàm đệ quy là một dạng đệ quy khác (một ví dụ khác về định nghĩa đệ quy). yes, a while loop is a form of recursion. Recursive functions are another form of recursion (another example of recursive definition).

Chúng ta có thể sử dụng vòng lặp while để triển khai đệ quy trong Python không?

Có thể sử dụng vòng lặp while để đệ quy trong Python không? . Trong một số trường hợp, điều này là hoàn toàn chính xác. Mặc dù vậy, có những cách sử dụng khác cho Đệ quy rất hợp lệ, trong đó các vòng lặp while hoặc for có thể không tối ưu. It is arguable that recursion is just another way to accomplish the same thing as a while loop. In some cases, this is absolutely correct. Though, there are other uses for Recursion that are very valid, where while loops or for loops may not be optimal.

Vòng lặp while là đệ quy hay lặp lại?

Sự khác biệt chính giữa hai loại này là trong đệ quy, chúng tôi sử dụng các lệnh gọi hàm để thực thi lặp lại các câu lệnh bên trong thân hàm, trong khi trong phép lặp, chúng tôi sử dụng các vòng lặp như “for” . Lặp lại nhanh hơn và tiết kiệm không gian hơn so với đệ quy. . Iteration is faster and more space-efficient than recursion.

Vòng lặp đệ 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ả.