Hướng dẫn can while loops be use to implement recursion in python? - vòng lặp while có thể được sử dụng để triển khai đệ quy trong python không?

Tôi cần trợ giúp biến điều này trong khi vòng lặp thành một phương pháp đệ quy? Làm thế nào để tôi làm điều này?

while z <= len(list):
     if z = len(list): #base case
        return something
     else:
        #do something else
     z += 1

Hỏi ngày 20 tháng 10 năm 2012 lúc 6:59Oct 20, 2012 at 6:59

Rahul Sharmarahul SharmaRahul Sharma

1.1073 huy hiệu vàng9 Huy hiệu bạc12 Huy hiệu đồng3 gold badges9 silver badges12 bronze badges

3

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    

Bạn không nên sử dụng

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
3 làm tên biến.

Đã trả lời ngày 20 tháng 10 năm 2012 lúc 7:01Oct 20, 2012 at 7:01

Hướng dẫn can while loops be use to implement recursion in python? - vòng lặp while có thể được sử dụng để triển khai đệ quy trong python không?

Rohit Jainrohit JainRohit Jain

206K45 Huy hiệu vàng399 Huy hiệu bạc516 Huy hiệu Đồng45 gold badges399 silver badges516 bronze badges

14

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1

Điều này được dịch thành mã đệ quy như sau. Bạn có thể làm việc trên trường hợp của bạn dựa trên điều này

def recursion(z):
    assert z <= 5
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
        recursion(z+1)

recursion(1)

Đã trả lời ngày 20 tháng 10 năm 2012 lúc 7:28Oct 20, 2012 at 7:28

Tôi sẽ thực hiện chức năng đệ quy bằng cách sử dụng vòng lặp --- factorial ---- (1) nó sẽ gọi chức năng thực tế dựa trên trong khi điều kiện (2) bạn có thể thêm nếu hoặc lồng nhau nếu theo báo cáo vấn đề của bạn
(1)It will call the fact function recursively based on while condition
(2)You can add if or nested if according to your problem statement

def fact(num):
    while num>1:
        return num*fact(num-1)
    else:
        return num

result = fact(3)
print(result)

6

Đã trả lời ngày 9 tháng 5 năm 2020 lúc 5:29May 9, 2020 at 5:29

Hướng dẫn can while loops be use to implement recursion in python? - vòng lặp while có thể được sử dụng để triển khai đệ quy trong python không?

condition = lambda n: n >= 3
repetition = lambda n: print(f'{n}: Repeating Line')
termination = lambda n: print(f'{n}: Terminal Line')

def recursive(n):
  if condition(n):
    repetition(n)
    n = recursive(n-1)
  else:
    termination(n)
  return n

def iterative(n):
  while condition(n):
    repetition(n)
    n -= 1
  termination(n)
  return n

def main():
  n = 4

  print("Recursion Example")
  result = recursive(n)
  print(f'result = {result}')
  print()

  print("Iteration Example")
  result = iterative(n)
  print(f'result = {result}')
  print()

main()


>>> Recursion Example
>>> 4: Repeating Line
>>> 3: Repeating Line
>>> 2: Terminal Line
>>> result = 2
>>> 
>>> Iteration Example
>>> 4: Repeating Line
>>> 3: Repeating Line
>>> 2: Terminal Line
>>> result = 2

Đã trả lời ngày 5 tháng 10 năm 2021 lúc 8:01Oct 5, 2021 at 8:01

Hướng dẫn can while loops be use to implement recursion in python? - vòng lặp while có thể được sử dụng để triển khai đệ quy trong python không?

John Forbesjohn ForbesJohn Forbes

1.17812 Huy hiệu bạc17 Huy hiệu đồng12 silver badges17 bronze badges

Cả hai vòng lặp và đệ quy đều là các khái niệm lập trình mà chúng tôi sử dụng để giải quyết các vấn đề. Người ta có thể phù hợp với một tình huống tốt hơn so với người kia, vì vậy biết khi nào nên sử dụng cái nào của hai là rất quan trọng.

Đối với mục đích của bức ảnh này, các đoạn mã mẫu sẽ được viết bằng Python.

Vòng lặp là gì?

Một vòng lặp là một hướng dẫn bảo máy tính thực hiện liên tục một hướng dẫn, thường dựa trên một điều kiện. Chúng tôi có ba loại vòng chính:loop is an instruction that tells the computer to repeatedly execute an instruction, usually based on a condition. We have three main kinds of loops:

  • def func(my_list, z):
    
        if z == len(my_list):
            return something
        else:
            # do something else
            return func(my_list, z+1)
    
    z = someValue
    print func(my_list, z)    
    
    4 vòng lặp
  • def func(my_list, z):
    
        if z == len(my_list):
            return something
        else:
            # do something else
            return func(my_list, z+1)
    
    z = someValue
    print func(my_list, z)    
    
    5 vòng lặp
  • def func(my_list, z):
    
        if z == len(my_list):
            return something
        else:
            # do something else
            return func(my_list, z+1)
    
    z = someValue
    print func(my_list, z)    
    
    6 vòng lặp

Cái sau không có sẵn trong Python và chỉ khác một chút so với các vòng

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
5 thông thường.

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
8 vòng lặp

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
8 Các vòng lặp thường được sử dụng để lặp lại một số lượng vật phẩm hữu hạn và thực hiện một hành động trên một mục trong một khoảng thời gian cụ thể trong vòng lặp, ví dụ: lặp lại danh sách tên và in chúng. are typically used to iterate over a finite number of items and perform an action on an item at a particular period in the loop, e.g., iterating over a list of names and printing them.

Trong ví dụ dưới đây, chúng tôi lặp lại một danh sách hữu hạn các tên và in từng tên vào thiết bị đầu cuối.

names = ["Kyle", "John", "Doe", "Sam"]

for name in names:
    print(name)

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
0 vòng lặp

Các vòng lặp

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
0 liên tục thực thi trong khi một điều kiện cụ thể là đúng và sẽ chỉ dừng/dừng khi gặp phải câu lệnh ngắt hoặc điều kiện ban đầu trở nên sai. continually execute while a particular condition is true and will only halt/stop when a break statement is encountered or the initial condition becomes false.


number = 0
while (number < 10):
    print(number)

Mã trên chứa một vòng

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
5 thực thi vô hạn vì
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 luôn bằng không. Hãy để sửa chữa điều này bằng cách tăng giá trị của
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 trên mỗi lần lặp.


number = 0
while (number < 10):
    print(number)
    number = number + 1

Bây giờ, mã này sẽ thực thi 9 lần.

Chúng tôi có một biến

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 với giá trị ban đầu là
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
6.

Điều kiện của vòng lặp chỉ là

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
7 khi giá trị của
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 nhỏ hơn 10. Chúng tôi thêm 1 vào giá trị của
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 sau mỗi lần lặp.

Vòng lặp bắt đầu bằng cách kiểm tra xem giá trị của

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 nhỏ hơn 10, điều này ban đầu đúng.

Bởi vì điều này là đúng, vòng lặp thực thi cơ thể của nó, in giá trị của

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 và thêm 1 vào nó. Giá trị của
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 bây giờ bằng 1 và kiểm tra lặp lại. 1 nhỏ hơn 10, do đó cơ thể thực hiện lại và 1 được thêm vào giá trị của
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3.

Quá trình này tiếp tục cho đến khi giá trị của

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 đạt 9. Vòng lặp kiểm tra xem 9 <10 là đúng và thực thi cơ thể của nó, sau đó thêm 1 vào
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3, tạo ra giá trị của nó
def recursion(z):
    assert z <= 5
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
        recursion(z+1)

recursion(1)
6. Vòng lặp tiến hành kiểm tra xem
z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 <10; Đây là
def recursion(z):
    assert z <= 5
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
        recursion(z+1)

recursion(1)
8, vì vậy vòng lặp dừng và chương trình kết thúc.

def recursion(z):
    assert z <= 5
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
        recursion(z+1)

recursion(1)
9 vòng lặp

def recursion(z):
    assert z <= 5
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
        recursion(z+1)

recursion(1)
9 Các vòng lặp tương tự như vòng lặp
def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
5 bình thường với một chút xoắn. Trong trường hợp này, vòng lặp sẽ luôn thực hiện ít nhất một lần trước khi nó bắt đầu kiểm tra xem điều kiện có được thỏa mãn không.

Như tôi đã đề cập trước đó, chúng tôi không có vòng lặp

def fact(num):
    while num>1:
        return num*fact(num-1)
    else:
        return num

result = fact(3)
print(result)
2 trong Python. Dưới đây là cấu trúc của một vòng lặp
def fact(num):
    while num>1:
        return num*fact(num-1)
    else:
        return num

result = fact(3)
print(result)
2 điển hình.

int number = 0

do {
    print(2);
    number = number + 1;
} while (number < 10);

Vòng lặp này bắt đầu bằng cách in 2 và tăng

z = 1

while z <=5:
    if z == 5:
        print 'base case'
    else:
        print 'repeated text'
    z += 1
3 từng người một trước khi kiểm tra điều kiện. Do đó, vòng lặp sẽ in 2 9 lần.

Đệ quy

Đệ quy là một chút tương tự như các vòng. Đệ quy là một tình huống trong đó một chức năng tự gọi mình trong cơ thể của nó trong quá trình thực hiện. Dưới đây là một ví dụ về hàm chức năng đệ quy tự thực hiện trong cơ thể của nó.Recursion is a situation where a function calls itself in its body during execution. Below is an example of a recursive functiona function that executes itself in its body.

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
0

Nếu bạn thực thi mã ở trên, cuối cùng nó sẽ tăng một

def fact(num):
    while num>1:
        return num*fact(num-1)
    else:
        return num

result = fact(3)
print(result)
5 nói rằng độ sâu đệ quy tối đa bị vượt quá. Bạn có thể sử dụng hàm đệ quy khi bạn cần giải quyết vấn đề chuỗi phức tạp bằng cách phá vỡ nó và giải quyết các trường hợp nhỏ hơn của nó. Một ví dụ phổ biến là tính toán các giai thừa hoặc loạt Fibonacci.

Vòng so với đệ quy

Hãy để sử dụng các tình huống sau đây làm ví dụ. Giả sử chúng tôi muốn có thể tính toán giai thừa của một số được cung cấp cho chúng tôi. Bộ phận của một số được đưa ra bằng cách tìm sản phẩm của số và người hàng xóm 1 bước lùi của nó liên tục cho đến khi chúng ta đạt 1.factorial of a number is given by finding the product of the number and its backward 1 step neighbor repeatedly until we reach 1.

Không có giai thừa cho số âm.

Lớp học của 5 được đưa ra bởi 5x4x3x2x1, bằng 120.

Các giai thừa của 0 được đồng ý là 1.

Hãy để viết một chức năng sẽ giải quyết vấn đề cho chúng tôi.

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
1

Trong chức năng này, chúng tôi sử dụng vòng lặp

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
5 để tính toán giai thừa của một số. Chức năng có thể trông hơi áp đảo, nhưng với đệ quy, chúng ta có thể lưu các dòng và khả năng đọc bằng cách phá vỡ vấn đề.

def func(my_list, z):

    if z == len(my_list):
        return something
    else:
        # do something else
        return func(my_list, z+1)

z = someValue
print func(my_list, z)    
2

Hàm trên là một hàm đệ quy tính toán giai thừa của một số. Nếu chúng ta so sánh cả hai chức năng, thì cái sau dễ đọc hơn và dễ hiểu hơn.

Sự khác biệt giữa các vòng lặp và đệ quy

  • Đệ quy không cần một điều kiện để được thỏa mãn trước khi nó có thể chạy.

  • Đệ quy có giới hạn để thực hiện nó. Điều này chủ yếu là do các chức năng được lưu trữ trên bộ nhớ ngăn xếp, có kích thước tối đa. Một hàm đệ quy sẽ liên tục tự gọi, đẩy các giá trị và các phiên bản mới của hàm vào ngăn xếp, cuối cùng có thể dẫn đến lỗi tràn ngăn xếp.

  • Để so sánh, các vòng được lưu trữ trong bộ nhớ động, trong đó các biến có thể được tạo ra vô thời hạn.

  • Việc thực hiện một hàm đệ quy tương đối chậm hơn các vòng.

    Hướng dẫn can while loops be use to implement recursion in python? - vòng lặp while có thể được sử dụng để triển khai đệ quy trong python không?

  • Đệ quy thường dễ đọc hơn các vòng.

  • Đệ quy đắt hơn, tính toán khôn ngoan, so với các vòng lặp, nhưng có thể được tăng tốc với ghi nhớ.

Người đóng góp

Hướng dẫn can while loops be use to implement recursion in python? - vòng lặp while có thể được sử dụng để triển khai đệ quy trong python không?
Josias Aurel

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

Vòng lặp trong thời gian có phải là một đệ quy?Sau đó, vâng, một vòng lặp trong thời gian là một dạng đệ quy.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).

Là trong khi lặp lại đệ quy hay lặp đi lặp lại?

Đệ quy là khi một hàm tự gọi chính nó trong mã của nó, do đó liên tục thực hiện các hướng dẫn có bên trong nó.Lặp đi lặp lại là khi một vòng lặp liên tục thực hiện tập hợp các hướng dẫn như "cho" vòng lặp và "trong khi" các vòng lặp.Iteration is when a loop repeatedly executes the set of instructions like "for" loops and "while" loops.

Đệ quy có được thực hiện tốt nhất với một vòng lặp không?

Đệ quy về bản chất không tốt hơn hoặc tồi tệ hơn các vòng lặp - mỗi vòng đều có những ưu điểm và nhược điểm, và những điều thậm chí phụ thuộc vào ngôn ngữ lập trình (và thực hiện). - each has advantages and disadvantages, and those even depend on the programming language (and implementation).