是否可以在不使用递归的情况下编写JSON解析器?
答
我同意James - 任何递归代码理论上可以使用迭代的方法来实现。在引用的链接上描述的堆栈方法是一个有效的选项。另一种方法是,您可以将其深度编码为n
,然后将其限制为所述深度的明显风险。
不知道更多关于您尝试运行JSON处理代码的环境和约束条件,很难说哪种方法最适合。有些事情要考虑:
- 递归代码通常是简单的跟随,如果你可以管理(在几乎任何语言与例99%兼容在那里处理JSON)使用固定的深度可以
- 迭代代码“效率更高”,因为它不需要太多的堆栈使用,但不能很好地扩展到
n
深度场景 - 基于堆栈的代码可以处理
n
深度场景,但可能不像其他场景那么直观程序员
此外,还可以对树结构进行线性化(JSON的对象图是隐含的,假定数组只能有一个“数组”的虚拟根)。这允许采用平坦流处理方法。如果您进一步注入人造代币(如DOWN
和UP
),它可以非常清晰易读。这是编译器设计和语言分析中出现的问题,但这里可能有助于理解。
这是错的。所有你需要的是一个堆栈。 进入递归调用是在栈上添加数据,然后离开将其删除。 – Scharron 2010-07-20 15:27:02
事实上,通常情况下你会得到的代码不如递归对应的代码更优雅,也更难以理解。 – NullUserException 2010-07-20 15:28:08
你基本上是对的。这是我编程课程中的一整章:从递归转换为迭代。 – 2010-07-20 15:29:15