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))

它不显式地使用“堆栈”(但递归使用调用堆栈)。

如果可以不使用递归来完成它,那么一定要不使用递归来完成它。没有必要无缘无故地向现有算法添加递归。