使用递归枚举评估(5 + 4)* 2的更简单方法

时间:2016-03-10 06:30:10

标签: swift recursion enums

我是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?

1 个答案:

答案 0 :(得分:1)

你可以在许多问题中找到递归用途;假设您要解析一些JSON代码,这个SO帖子使用递归方法。

SwiftyJSON - 'inout JSON' is not convertible to 'JSON'

递归是一个困难的主题;许多学生很难找到;但是你会在编码世界的高层,即现实世界中找到大量的例子。

B-Tree搜索也使用递归!!你的解决方案只是提醒我。