564 words3 min
数学:燃烧数
一道只求 f(3) 的递归钓鱼题。
考虑如下递归算法:
f(x)={−x21f(x−f(x−1))x<0x≥0
求 f(3)。
f(0)=21f(−f(−1))=21f(−1)=21
f(21)=21f(21−f(−21))=21f(0)=41
f(1)=21f(1−f(0))=21f(21)=81
f(2)=21f(2−f(1))=21f(815)
自变量是实数,不能仅在整数上递推。继续展开还会产生更多二进有理数。
燃烧数(Fusible Number)来自引线计时问题。
一根引线从一端点燃后,恰好一小时烧完,但各处燃烧速度并不均匀。若两端分别在时刻 a 与 b 点燃,烧完的时刻为:
a∼b=2a+b+1
运算要求 ∣a−b∣<1。
规定 0 是燃烧数。若 a,b 是燃烧数且 ∣a−b∣<1,则 a∼b 也是燃烧数。
例如:
0∼0=21
0∼21=43
21∼21=1
所有燃烧数都是非负二进有理数,反之不成立。
2022 年的论文构造了燃烧数的子集 F0,称为 温和燃烧数(Tame Fusible Number)。
设 T(x) 表示大于 x 的最小温和燃烧数,则:
f(x)=T(x)−x
因此,f(x) 是 x 到下一个温和燃烧数的间距。
早期资料曾把同一个递归式用于完整燃烧数集合。2012 年的综述给出了反例。
这个递归式仅对应 F0,不是燃烧数的定义。
燃烧数按通常大小构成良序集,序型为 ε0。温和燃烧数的序型同样是 ε0。
在 F0 中,整数 1,2,3 的位置依次为:
123⟷ω,⟷ωω,⟷ωωω
不断迭代 α↦ωα,上确界就是 ε0。
递归调用的参数都小于原参数,但这不能证明算法终止。实数存在有下界的无限严格递减数列。
论文利用温和燃烧数的良序性,证明了算法对所有实数输入都会终止。不过,皮亚诺算术(Peano Arithmetic,PA)无法证明:
对每个自然数 n,计算 f(n) 的递归算法都会终止。
这个结论针对所有自然数输入,不影响单独计算某个固定的 f(n)。
令 d(n)=−log2f(n)。论文给出的递推关系可以算出:
d(0)d(1)d(2)d(3)=1,=3,=10,=1541023937
所以:
f(3)=2−1541023937