6个2教你认识递归的力量!

2^(2^(2^(2^(2^2))))=? 

这个是很久以前我自己想出来的一个计算式,绝对原创。或许其他专业人士早就发现了,只是我孤陋寡闻,并没有从网上看见它。

这个计算式最大的趣味就在于它看起来并没有 2^99999999999999999999999 那么吓人,但是它真正的值比2^99999999999999999999999大了无数倍,因为从我写出这个计算式后,我发现我甚至无法用语言去描述这个结果的长度和广度。

我们看看这个计算式一步一步的解析:

2^(2^(2^(2^(2^2))))=2^(2^(2^(2^4)))=2^(2^(2^16))=2^(2^65536),到了这一步,你可以想象一下,这个数字到底是多大。假设计算出来的值每一位占据宇宙中一个电子空间大小,那么我们的宇宙(假设最大直径300亿光年)能否装满这个数字?

作为coder,很明显这个是一个递归计算.可用如下代码实现,结果Pow2(5, 2)已经显示为无穷大,而window自带计算器计算为Pow2(5, 2)=4.5624406176221952186411716057003e+192。

        void Count()
        {
            var number = Pow2(6, 2);  //5次递归计算
        }

        dynamic Pow2(int count, dynamic number)
        {
            return (--count > 0) ? Pow2(count, Math.Pow(2, number)) : number;
        }

这个数值比"在棋盘上64个格子里放大米粒的故事"要大多了,递归的力量不可想象!

原文地址:https://www.cnblogs.com/flyant/p/4337917.html