Đó là đáng nói đến là every recursion can be converted into iteration, mặc dù đôi khi có thể không dễ dàng như vậy. Đối với ví dụ cụ thể trong câu hỏi, nó là đủ đơn giản, nó chỉ là vấn đề tích lũy kết quả mong đợi trong một biến và duyệt qua danh sách đầu vào theo thứ tự thích hợp. Đây là những gì tôi muốn nói:
def convert(lst):
acc = {}
for e in reversed(lst):
acc = {e: acc}
return acc
Hoặc thậm chí ngắn hơn, thuật toán trên có thể được thể hiện dưới dạng một lớp lót (giả sử Python 2.x, bằng Python 3.x reduce
đã được chuyển đến các mô-đun functools
). Chú ý tên biến trong dung dịch trước đó tương ứng với các thông số của lambda, và làm thế nào trong cả hai trường hợp, các giá trị ban đầu của ắc là {}
:
def convert(lst):
return reduce(lambda acc, e: {e: acc}, reversed(lst), {})
Dù bằng cách nào, chức năng convert
tác phẩm như mong đợi:
mylist = ['a','b','c','d']
convert(mylist)
=> {'a': {'b': {'c': {'d': {}}}}}
Nguồn
2012-11-05 18:46:11
Vâng, đệ quy === lặp, do đó, có. Bạn có bất kỳ mã nào để hiển thị những gì bạn đã thử không? Có lẽ một câu trả lời có thể xây dựng từ đó. – Makoto
bạn có thể sử dụng đơn giản 'map',' reduce' –
@Makoto không có trường hợp sử dụng cụ thể nào mà tôi có. Tôi chỉ đơn giản là xem xét một số dự án FOSS và nhận thấy rằng hầu hết, nếu không phải tất cả, sử dụng đệ quy (không chính xác). Nó chỉ khiến tôi suy nghĩ xem liệu có một sự thay thế cho đệ quy hay không. Câu trả lời của Óscar López khá sâu sắc (đặc biệt là liên kết). –