【问题标题】:Recursive function variable problems递归函数变量问题
【发布时间】:2021-12-11 03:56:05
【问题描述】:

我的递归函数接受此字符串的String prefixint index(最初为0)。 根据索引计算一个postfix 字符串。

Storage 是一个类,其中包含正在处理的前缀字符串的postfix 字符串和整数index。这个类的目的是我可以同时返回字符串和整数。

输入输出的另一个例子: | ^+-ABC+D-EF | AB-C+DEF-+^ |AB-A+AB-^ |

示例

given input desired output current output
-+ABC AB+C- AB+A-
-A+BC ABC+- ABC+-

问题

例如-+ABC我将得到AB+A-而不是预期的AB+C-,因为索引最后指向2而不是4。

它运行良好,只是在我调用底部的 return 之后索引从正确的值 3 变为 1。

}

任何关于纠正此问题的最佳方法的想法将不胜感激!

【问题讨论】:

  • 不应该将isOperand 称为isOperator
  • 你能发布一个输入的例子,期望的输出和结果的使用吗?
  • @PeterMmm 示例输入:-+ABC、-A+BC 和所需输出:AB+C-、ABC+- 和当前输出:AB+A-、ABC+-
  • @k314159 我不这么认为。如果它是一个操作数,则返回(基本情况),如果是运算符,则需要递归获取下两个可能是复杂操作数的操作数
  • 我之前误解了 - 现在我明白 isOperand(char) 仅在 char 为真时为真,例如“A”或“B”。这是一种转换为“反向波兰表示法”的方法,对吧?如果是这样,请添加标签 [postfix-notation] - 这将有助于人们理解并引入 postfix-notation 专家。

标签: java string recursion reverse postfix-notation


【解决方案1】:

您正在返回索引但没有使用它。因此,当convert 处理一个非平凡的表达式时,它会将索引前移超过 1 并返回它,但您会丢弃该返回值并将其前移 1。您可以通过使用索引来解决此问题。

替换第二次出现的

        index += 1;

        index = postfix1.getIndex() + 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2020-09-09
    相关资源
    最近更新 更多