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 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
Đă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
Đăng ký for flower in flowers: print(flower) đầu ra 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Đệ 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 PythonCá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ạiVì 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ênTí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 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 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 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. 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ỗiMộ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 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. 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 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. 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óngQuicksort 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 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úcTrong 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
Hỗ trợ báo chí công nghệ độc lậpNhậ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 sáng tạo tham gia chơi gameOlympic phân tích do MachineHack tổ chức với Đại học Shiv Nadar đã kết thúc thành côngHDFC 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 2022Mộ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ơ Sự kiện sắp tới của AIMHội nghị trực tiếp (Bangalore) Đă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) Đăng ký Hội nghị, trực tiếp (Bangalore) Đăng ký Hội nghị trực tiếp (Bangalore) Đăng ký Hội nghị, trực tiếp (Bangalore) Đăng ký 3 cách để tham gia cộng đồng của chúng tôinhóm điện tínKhá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òaLuô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ôiNhậ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 ĐẦUTensorFlow đấu với Pycaret. So sánh các khung học máyVì 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 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 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. Intel chiếm lĩnh thị trường bộ xử lý với Intel Core thế hệ thứ 12Vớ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 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 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 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ệuTrong 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 bài hội đồng. Thiết kế hackathons để khuyến khích giải quyết vấn đề trong AI/MLTheo báo cáo của QuantHub, 67% các công ty được khảo sát nói rằng 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àoCử 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ả. |