递归枚举是一种枚举类型,它有一个或多个枚举成员使用该枚举类型的实例作为关联值。使用递归枚举时,编译器会插入一个间接层。你可以在枚举成员前加上indirect
来表示该成员可递归。
indirect
来表示该成员可递归。enum DiGui {//定义枚举
case number(Int)//枚举添加关联值(可以为元组)
indirect case addition(DiGui,DiGui)
indirect case multiplication(DiGui,DiGui)
}
//递归 递归 该函数如果遇到纯数字,就直接返回该数字的值。如果遇到的是加法或乘法运算,则分别计算左边表达式和右边表达式的值,然后相加或相乘。
func evaluate(_ expression: DiGui) -> Int {
switch expression {
case let .number(value):
return value//跳出递归
case let .addition(left, right):
return evaluate(left) + evaluate(right)
case let .multiplication(left, right):
return evaluate(left) * evaluate(_:right)
}
}
//(5+4)*2
let five = DiGui.number(5)
let four = DiGui.number(4)
let sum = DiGui.addition(five, four)
let cheng = DiGui.multiplication(sum, DiGui.number(2))
evaluate(cheng)//18