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个格子里放大米粒的故事"要大多了,递归的力量不可想象!

时间: 2024-10-13 01:38:09

6个2教你认识递归的力量!的相关文章

初识递归

#递归函数 # 了解什么是递归 : 在函数中调用自身函数 # 最大递归深度默认是997/998 -- 是python从内存角度出发做得限制 # 能看懂递归 # 能知道递归的应用场景 # 初识递归 -- # 算法 -- 二分查找算法 # 三级菜单 -- 递归实现 # while True: # print('从前有座山') # def story(): # print('从前有座山') # story() # print(111) # # story() #RecursionError: maxi

效率和开销问题是递归最大的缺点

递归在解决某些问题的时候使得我们思考的方式得以简化,代码也更加精炼,容易阅读.那么既然递归有这么多的优点,我们是不是什么问题都要用递归来解决呢?难道递归就没有缺点吗?今天我们就来讨论一下递归的不足之处.谈到递归就不得不面对它的效率问题. 为什么递归是低效的 还是拿斐波那契(Fibonacci)数列来做例子大发888娱乐城.在很多教科书或文章中涉及到递归或计算复杂性的地方都会将计算斐波那契数列的程序作为经典示例.如果现在让你以最快的速度用C#写出一个计算斐波那契数列第n个数的函数(不考虑参数小于1

递归调用(一)

学习编程的时候老师总是不建议使用递归,一些书上至今也是这么建议的.但是递归在二叉树上的应用即优美又稍显复杂.所以弄清楚递归的本质是分治是很有必要的.将大规模问题缩小. 为什么要用递归 编程里面估计最让人摸不着头脑的基本算法就是递归了.很多时候我们看明白一个复杂的递归都有点费时间,尤其对模型所描述的问题概念不清的时候,想要自己设计一个递归那么就更是有难度了. 很多不理解递归的人(今天在csdn里面看到一个初学者的留言),总认为递归完全没必要,用循环就可以实现,其实这是一种很肤浅的理解.因为递归之所

函数的递归调用与二分法

一,什么是递归? 递归的作用可以完全取代循环,很多函数编程语言中习惯用递归来实现循环 1,递归算法: (1),'重复' ,凡是通过循环语句可以实现的,都可以用递归来实现 (2),'将问题分解成同类的子问题', 如持续循环的运算操作,持续循环的判断操作,他们的每次循环都是同样的一个'动作',这个动作就是一个子问题 2,函数的递归调用: 在调用一个函数的过程又直接或者间接的调用该函数本身,称之为递归调用. 递归必须满足两个条件: 1, 每进入下一次递归调用,问题的规模都应该有所减少 2, 递归必须有

2017 南海区区赛

2017区赛 解题报告   第一题元音字母(vowel) [问题描述] 给你一个所有字符都是字母的字符串,请输出其中元音字母的个数.(提示:二十六个字母中的五个元音字母是a,e,i,o,u; 所有字符有大小写区别.) [输入格式] 仅一行,包括一个字符串. [输出格式] 输出一个整数,如题所述. [输入样例] helloworld [输出样例] 3 [数据规模] 对于100%的数据,字符串长度小于等于10^6. 这题比较水,就是看一个字符串里面有多少个元音字母.学过字符串都能够做出来,我就不多说

diff 实现

就是用了 @smlg 提到的LCS.我用伪CoffeeScript代码翻译下吧: 首先我们把文件old.new转化为两个列表,列表的每个元素是文件的某一行: A = [1行.2行.3行.4行....] B = [1行.2行.3行.4行....] 然后我们计算A和B最长的相似元素的长度lcs(递归就是力量) lcs = (A, B) -> result = 0 if A.length is 0 or B.length is 0 result else if A[0] is B[0] result

猴王问题约瑟夫环

[Joseph问题描述]n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. [求解思路]我们知道第一个人(编号一定是m%n-1) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始): k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2 并且从k开始报0. 现在我们把他们的编号做一下转换: k --> 0 k+1 --> 1 k+2 --> 2 ... ... k-2 --&

一招教你巧用递归解决矩阵最大序列和问题

之前同事问了一道需要点脑洞的算法题,我觉得蛮有意思的,思路可能会给大家带来一些启发,在此记录一下 题目 现有一个元素仅为 0,1 的 n 阶矩阵,求连续相邻(水平或垂直,不能有环)值为 1 的元素组成的序列和的最大值.假设有如下矩阵 则此矩阵连续相邻值为 1 的元素组成的序列和分别为 4, 3,(如图示),可知这个矩阵符合条件的序列和的最大值为 4 解题思路 要算序列和的最大值,我们可以先找出所有可能的序列,自然就找到了序列和的最大值,那怎么找这些序列呢?首先我们发现,每个序列的起点和终点必然是

缠中说禅:教你炒股票108课(转载)

股市闲谈:G股是G点,大牛不用套!(2006-05-12 19:02:25) 能和本ID聊股市的,如果有,最多就处在精子或卵子状态,连受精卵都算不上.而且股市游戏是靠干出来而不是说出来的,因此一般都不说.但看到有些人被这股市折腾得厉害,出于同情,又周末了,也就说两句.  一年前股市跌到1000点最腥风血雨时,当时看到很多人在网上很可怜,就用老ID给了一个明确的说法,叫"G股是G点",越腥风血雨就机会越大了.现在这个G点已经弄得让很多人受不了,绝大多数在市场中的人都是很犯贱的,跌也怕,涨