c++ - 自然数的集合论定义(递归)

标签 c++ recursion numbers set

我正在学习一门离散数学类(class),我需要开发一个 C++ 程序,该程序接收一个字符串作为输入并返回它所代表的自然数(如果有的话)。自然数定义如下: 0 = {}, 1 = {{}}, 2 = { {} {{}} }, 3 = { {} {{}} {{} {{}}} } 等等。我认为这可以在基本情况为“{}”的情况下递归完成,但我不确定如何考虑解决方案。我的一个 friend 告诉我,他注意到左括号的数量总是 2^n,但我觉得这并没有那么简单,因为我认为这有一些问题。 谢谢!

最佳答案

只计算开大括号并不能区分格式正确的输入和格式错误的输入。

首先编写一个程序,该程序可以在给定输入值的情况下构造和输出大括号形式的数字。

这将为您澄清问题。那么您能否将大括号输入与您构造的大括号字符串之一进行匹配?你能从那里得到完整的解决方案吗?

编辑: 上述解题技巧是先解一个较简单的子问题或相关问题。另一种方法是寻找多种方法,然后选择一种(如果发现困难,请准备好转换)。

解决此问题的另一种方法是将输入读入一组 STL 集合。像这样的东西:

class Set {
  std::set<Set> elements;
 public:
  void read(std::istream in) {...}  // recursively reads & adds Sets
  int size() {...}
}

关于c++ - 自然数的集合论定义(递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30017975/

相关文章:

javascript - 这个 JS 函数会被视为递归吗?

c++ - '3.4E +/- 38 (7 digits)' 到底是什么意思?

python - 递归错误: maximum recursion depth exceeded in comparison - GeeksForGeeks IDE or Online Compilers

json - jQuery:递归删除所有与给定模式匹配的键

C rand() 函数不生成随机数

Objective-C:将数字格式化为序数:1, 2, 3, .. to 1st, 2nd, 3rd

c++ - 反混淆 C++ 源代码

c++ - QLineEdit 在 Qt 中调用 SetText() 后无法撤消

c++ - 简单的 3x3 矩阵逆代码 (C++)

c++ - 类未定义