Recursion 计算前缀并将其转换为中缀
我在编写将前缀转换为中缀的程序时遇到了一些严重的问题。我已经编写了两个程序,它们使用堆栈,但使用的方式不同——一个使用两个堆栈,另一个使用递归方法。但我仍然在正确地执行它时遇到问题,因为需求要求它使用两个堆栈(操作数和运算符)并使用递归方法。我在将这两个需求同时可视化时遇到了严重的问题。有人知道算法会是什么样子吗?如果我能有一个简单的算法,它将真的是一个救命稻草。 谢谢这就够了Recursion 计算前缀并将其转换为中缀,recursion,converter,prefix,infix-notation,stack,Recursion,Converter,Prefix,Infix Notation,Stack,我在编写将前缀转换为中缀的程序时遇到了一些严重的问题。我已经编写了两个程序,它们使用堆栈,但使用的方式不同——一个使用两个堆栈,另一个使用递归方法。但我仍然在正确地执行它时遇到问题,因为需求要求它使用两个堆栈(操作数和运算符)并使用递归方法。我在将这两个需求同时可视化时遇到了严重的问题。有人知道算法会是什么样子吗?如果我能有一个简单的算法,它将真的是一个救命稻草。 谢谢这就够了 (define (prefix->infix pre) (cond ((list? pre)
(define (prefix->infix pre)
(cond ((list? pre)
(assert (= 3 (length pre)))
(let ((operator (list-ref pre 0))
(operand1 (list-ref pre 1))
(operand2 (list-ref pre 2)))
(list (prefix->infix operand1)
operator
(prefix->infix operand2))))
(else pre)))
> (prefix->infix '(+ 1 2))
(1 + 2)
> (prefix->infix '(+ 1 (* 2 3)))
(1 + (2 * 3))
> (prefix->infix '(+ (/ 1 4) (* 2 3)))
((1 / 4) + (2 * 3))
它不显式地使用“堆栈”(但递归使用调用堆栈)。如果可以不使用递归来完成它,那么一定要不使用递归来完成它。没有必要无缘无故地向现有算法添加递归。