递归这么难,子沐来解惑

递归为何物

程序调用自身的编程技巧称为递归( recursion)。

递归做为一种算法在程序设计语言中广泛应用。

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

递归的能力在于用有限的语句来定义对象的无限集合。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

来一段递归形式的斐波那契数列的代码

递归这么难,子沐来解惑

以上是计算第100个斐波那契数是多少,看着是不是很简单。其实很多童鞋运行的时候发现,我的天,是不是我写错了,怎么没有出结果呢?

其实不用担心,因为使用了递归,则他会计算到很深的内容,然后很多数值会被一再反复的被重复计算,所以速度慢,所以说计算能不用递归则不用递归。

递归这么难,子沐来解惑

阶乘

阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。

一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

话不多时,再来一段Python代码,感受一下简单的Python

递归这么难,子沐来解惑

相信大家都能看的懂,我就不解释了。因为俗话说得好,解释就是掩饰,掩饰就是事实。

递归这么难,子沐来解惑

咦!!!貌似哪里不太对。

汉诺塔

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

这是一道非常非常非常典型的递归问题的算法题,如果童鞋们能想明白这件事,那么你视递归如浮云。

递归这么难,子沐来解惑

纳尼,你告诉我没有看看懂代码,好的,那么我们来推演一下,他的运行过程,以3个盘子为例。

递归这么难,子沐来解惑

相信大家看了这个思路,对于简单汉诺塔的算法和思维过程已经有所了解了,想要更深入的知识和学习资料,来加群获取。群号为586656942,子沐等你来沟通。

递归这么难,子沐来解惑

¥156.4
购买
视频加载中...

相关推荐