自然数的集合论定义(递归)
Set-theoretic definition of natural numbers (recursion)
我正在上一门离散数学课程,我需要开发一个 c++ 程序,该程序接收一个字符串作为输入,returns 它代表哪个自然数(如果有)。自然数定义如下:
0 = {}, 1 = {{}}, 2 = { {} {{}} }, 3 = { {} {{}} {{} {{}}} } 等等。我认为这可以在基本情况为“{}”的情况下递归完成,但我不确定如何考虑解决方案。我的一个朋友告诉我,他注意到左括号的数量总是 2^n,但我觉得这并没有那么简单,因为我认为这有一些问题。
谢谢!
只计算开大括号并不能区分格式正确的输入和格式错误的输入。
首先编写一个程序,该程序可以在给定输入值的情况下构造和输出大括号形式的数字。
这将为您解决问题。那么您能否将大括号输入与您构造的大括号字符串之一进行匹配?你能从那里得到完整的解决方案吗?
编辑: 上述解题技巧是先解一个比较简单的子问题或相关问题。另一种方法是寻找多种方法,然后选择一种(如果发现困难,请准备好切换)。
解决此问题的另一种方法是将输入读入一组 STL 集合。类似于:
class Set {
std::set<Set> elements;
public:
void read(std::istream in) {...} // recursively reads & adds Sets
int size() {...}
}
我正在上一门离散数学课程,我需要开发一个 c++ 程序,该程序接收一个字符串作为输入,returns 它代表哪个自然数(如果有)。自然数定义如下: 0 = {}, 1 = {{}}, 2 = { {} {{}} }, 3 = { {} {{}} {{} {{}}} } 等等。我认为这可以在基本情况为“{}”的情况下递归完成,但我不确定如何考虑解决方案。我的一个朋友告诉我,他注意到左括号的数量总是 2^n,但我觉得这并没有那么简单,因为我认为这有一些问题。 谢谢!
只计算开大括号并不能区分格式正确的输入和格式错误的输入。
首先编写一个程序,该程序可以在给定输入值的情况下构造和输出大括号形式的数字。
这将为您解决问题。那么您能否将大括号输入与您构造的大括号字符串之一进行匹配?你能从那里得到完整的解决方案吗?
编辑: 上述解题技巧是先解一个比较简单的子问题或相关问题。另一种方法是寻找多种方法,然后选择一种(如果发现困难,请准备好切换)。
解决此问题的另一种方法是将输入读入一组 STL 集合。类似于:
class Set {
std::set<Set> elements;
public:
void read(std::istream in) {...} // recursively reads & adds Sets
int size() {...}
}