首页 > 解决方案 > 如何在 Python 中没有任何循环(例如:for、while 等)递归 JSON 文件

问题描述

我很困惑如何在 Python3 中创建没有任何循环的递归函数来打印 JSON 文件。

所以我有大学的家庭作业,主题是关于函数的递归,讲师告诉我只使用递归而不是循环。

我在 Category.json 中的 json 文件是:

 [{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
 {'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
 {'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
 {'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
 {'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
 {'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
 {'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
 {'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
 {'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
 {'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'},
 {'catId': 1, 'id': 11, 'name': 'Buku Taman'},
 {'catId': 2, 'id': 12, 'name': 'Persiapan Tes CPNS'},
 {'catId': 2, 'id': 13, 'name': 'Persiapan Tes TOELF & IELTS'},
 {'catId': 2, 'id': 14, 'name': 'Persiapan TPA & Psikotest'},
 {'catId': 3, 'id': 15, 'name': 'Buku Aktivitas'},
 {'catId': 3, 'id': 16, 'name': 'Buku Cerita Anak'},
 {'catId': 3, 'id': 17, 'name': 'Buku Dongeng'},
 {'catId': 3, 'id': 18, 'name': 'Buku Dunia Pengetahuan'},
 {'catId': 3, 'id': 19, 'name': 'Buku Fabel'}]

我的python代码是:

import json

def showData(file):
    file_json = open(file)
    data = json.loads(file_json.read())

    return data

print(showData("Category.json"))

我没有完成我的代码,因为我仍然对如何在没有循环的情况下进行递归感到困惑。

你有什么主意吗?

标签: pythonjsonloopsdictionaryrecursion

解决方案


我不明白你为什么recursion只需要使用来打印 JSON 文件而不是iterations(for, while).

这就是您使用Recursion打印数据的方式。

d = [{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'},
 {'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'},
 {'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'},
 {'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'},
 {'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'},
 {'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'},
 {'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'},
 {'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'},
 {'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'},
 {'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}]

# Recursive Code
def print_json(j):
    # Base condition
    if len(j) == 0:
        return
    # Print the first item of j
    print(j[0])
    # Call the same function on j[1:]
    # Skipping the first item of j in every call
    print_json(j[1:])
    
print_json(d)
{'catId': 1, 'id': 1, 'name': 'Buku & Bangunan'}
{'catId': 1, 'id': 2, 'name': 'Buku Codes & Standar'}
{'catId': 1, 'id': 3, 'name': 'Buku Dekorasi & Ornamen'}
{'catId': 1, 'id': 4, 'name': 'Buku Desain Dapur'}
{'catId': 1, 'id': 5, 'name': 'Buku Desain Kamar'}
{'catId': 1, 'id': 6, 'name': 'Buku Desain Ruang Keluarga'}
{'catId': 1, 'id': 7, 'name': 'Buku Desain Ruang Tamu'}
{'catId': 1, 'id': 8, 'name': 'Buku Desain Rumah'}
{'catId': 1, 'id': 9, 'name': 'Buku Interior & Eksterior'}
{'catId': 1, 'id': 10, 'name': 'Buku Metode & Material Bangunan'}

您知道递归在内部使用称为递归堆栈的东西吗?

这是递归代码的一些额外空间开销。


推荐阅读