递归函数c语言例题解析,C语言递归题
大家好,我是小红,我又来记录我的学习了!
今天要分享的主要是:递归的例子。这些例子非常经典。希望对大家有用。
看下面的例子1:
用函数递归求n的阶乘?
让我们先用前面的思路来求我们的阶乘。首先,我们需要知道n的阶是1乘以2乘以3乘以4直到所需的数。然后我们可以把每次得到的乘积乘以一个比之前高的数,得到我们的阶乘。
如果要用函数递归来写,就直接用我们的数学公式阶乘公式:N!=n*(n-1)!这里要注意一点,我们的1的阶乘是1,所以我们要判断我们输入的编队是等于还是小于1。如果等于或者小于1,我们直接返回1就ok了。请参见下面的代码:
第二题:用函数递归求第n个斐波那契数;
首先,我们要知道什么是斐波那契数。给你解释一下:
斐波那契数列,又称黄金分割数列,是数学家列奥纳多斐波那契以养兔为例推出的,所以又称“兔子数列”,指的是这样一个数列:1,1,2,3,5,8,13,21,34.在数学方面。斐波那契数列递归定义如下:F(0)=0,F(1)=1,F(n)=F(n-1) F(n-2)(n 2,n N*)。
总之你要做的就是知道公式,就是F(n)=F(n-1) F(n-2),所以思路还是一样的,要注意一点,就是他的第一项和第二项都是1,所以如果这里要判断他是否大于2,如果不是,返回1就ok了。让我们看看下面的代码:
另一个问题是昨天剩下的问题:
编写函数不允许创建临时变量。求字符串的长度?
这里也使用了递归方法,这是类似的。
最后,老师给我们留了两道思考题:
1.河内塔问题
2.青蛙在台阶上跳
先普及一下河内的这个塔,青蛙跳台阶的意思。
河内塔:
汉诺塔问题是心理学实验研究中常见的任务之一。这个问题的主要材料包括三根高度相同的柱子和一些大小颜色不同的圆盘。这三列分别是起始列A、辅助列B和目标列C。
有三根横条(编号为A、B、C),在横条A上从下到上依次放置64个金盘(如图1)。游戏目标:将A条上的所有金盘移动到C条上,按照原来的顺序折叠。操作规则:一次只能移动一个板,移动过程中保持大板在下方,小板在所有三根杆的上方。在操作过程中,板可以放置在任何杆A、B和c上[2]
图1:汉诺塔问题的图解[2]
解析:对于这样的问题,任何人都不可能直接写出移动盘子的每一步,但是我们可以用下面的方法来解决。假设移动板的数量为N。为了将这N块板从A-杆移动到C-杆,您可以执行以下三个步骤:
(1)将1号至n-1号光盘从A杆移动到B杆,以C杆为中介;
(2)将A栏中剩余的第N个磁盘移动到C栏;
(3)以A-bar为中介;将1号到n-1号光盘从B杆移动到C杆。
这就是问题所在。这是青蛙的问题:
青蛙一次只能跳1级或者2级。找出青蛙在N级台阶上要跳多少种跳法(顺序不同算不同结果)。比如:三步{1,1,1}、{1,2}和{3}的跳跃法,这时候小伙伴有疑惑吗?不是{2,1}吗?这里我们认为青蛙都是用跳2和1的方法,没有顺序,所以{1,2}和{
通过上表,我们可以发现其中的规律:
1 1=2,
1 2=3,
2 3=5,
所以步数的多少跳=前两步的跳数之和。
公式为:f(n)=f(n-1) f(n-2)
明天,我将分享我的代码和对两个问题的理解,今天到此为止!
好了,今天的分享就到这里。明天见。
以下链接是我今天输入的代码:
https://gitee.com/hong-houyuan/thirteen-day
原创作品来自不知道C的博主,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。