我是Swift的新手,正在尝试学习递归枚举的概念。我在" swift编程语言2.1"中看到了这段代码片段。
indirect enum ArithmeticExpression {
case Number(Int)
case Addition(ArithmeticExpression, ArithmeticExpression)
case Multiplication(ArithmeticExpression, ArithmeticExpression)
}
func evaluate(expression: ArithmeticExpression) -> Int {
switch expression {
case .Number(let value):
return value
case .Addition(let left, let right):
return evaluate(left) + evaluate(right)
case .Multiplication(let left, let right):
return evaluate(left) * evaluate(right)
}
}
//evaluate (5 + 4) * 2
let five = ArithmeticExpression.Number(5)
let four = ArithmeticExpression.Number(4)
let sum = ArithmeticExpression.Addition(five, four)
let product = ArithmeticExpression.Multiplication(sum, ArithmeticExpression.Number(2))
print(evaluate(product))
然而,在我看来,上面的陈述是评估(5 + 4)* 2的冗长方式,我只是想知道是否有一种更简单的方法来使用递归枚举来评估(5 + 4)* 2?
答案 0 :(得分:1)
你可以在许多问题中找到递归用途;假设您要解析一些JSON代码,这个SO帖子使用递归方法。
SwiftyJSON - 'inout JSON' is not convertible to 'JSON'
递归是一个困难的主题;许多学生很难找到;但是你会在编码世界的高层,即现实世界中找到大量的例子。
B-Tree搜索也使用递归!!你的解决方案只是提醒我。