我试图更好地理解 ZFC 集合论,特别是计算机程序如何模拟无穷大公理以“构造”自然数。我见过的用于构造自然数的典型符号是:“{”、“}”和“,”。
下面的代码有效,但我希望有一个纯粹的递归解决方案。一个给定一个自然数(这里使用 int),递归地将相应的字符串构建到它的集合论编码中,然后返回它。理想情况下,我希望它能够在不使用任何额外数据结构(如当前使用的字符串数组)的情况下工作。
如果运行时间很慢(指数型)也没关系。使用递归有时会使过程的表达更简单,更简洁/优雅且更易于理解,我非常想看看这种解决方案可能是什么样子,无论性能如何。最终,我想更好地理解数学/数字的基础。我有很多问题,但认为这可能是一个很好的开始方式。谢谢!
// Converts an natural number to its ZFC set notation:
// 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{},{{}}},
// 3 = {0,1,2} = {{},{{}},{{},{{}}}} ...
import java.util.Scanner;
public class IntToSetNotation {
private static final String openBrace = "{";
private static final String closeBrace = "}";
private static final String seperator = ",";
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.println(getSetNotationFromInt(n));
}
private static String getSetNotationFromInt(int n) {
String[] nums = new String[n+1];
nums[0] = openBrace + closeBrace;
for (int i = 1; i < nums.length; i++) {
if(i == nums.length-1)
nums[i] = openBrace + getPrevSets(i,nums) + closeBrace;
else
nums[i] = seperator + openBrace + getPrevSets(i,nums) + closeBrace;
}
return nums[n];
}
private static String getPrevSets(int n, String[] nums) {
String s = "";
for (int i = 0; i<n; i++)
s += nums[i];
return s;
}
}