很高兴你打开了这篇博客,今天主要目的就是带领同学们领略一下递归函数用魔法打败魔法这个interesting过程!
目录
一:递归知识点
—— 1.递归调用:在调用一个函数的过程中又出现直接或间接的调用该函数本身,实际上就是一个用魔法打败魔法的过程!
——2.递归调用与递归函数的关系:存在递归调用的函数成为递归函数;
——3.递归通式: 递归=递推 + 回推;
——4.递归函数的特点:
①每次调用函数都有一次返回的过程,在函数与数组中提现的尤其生动明显。
② 必然存在 if else 条件判断语句的调用,否则代码将进入无休止的调用,类似死循环。
③—递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
—递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
(简单来说就是:最先被调用的最后返回,最后调用的最先返回)
二:递归的实战
①求第五个的年龄(有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?)
#include<stdio.h>
int main()
{
int age(int n);
printf("age=%d\n",age(5));
}
int age(int n)
{
int i;
if(n==1)
i=10;
else
i=age(n-1)+2;
return i;
}
②递归求n的阶乘
#include <stdio.h>
int main()
{
int jc(int(n));
int n=10;
printf("%d的阶乘是:%d\n",n,jc(n));
}
int jc(int(n))
{
int i;
if(n==0||n==1)
i=1;
else
i=jc(n-1)*n;
return i;
}
③递归做fibonacci(斐波那契数列)//老面孔了都,这道题另外三种方法见文末链接;
#include <stdio.h>
int main()
{
int fibonacci(int(n));
int n=20;
printf("斐波那契第%d项是:%d\n",n,fibonacci(n));
}
int fibonacci(int(n))
{
int i;
if(n==1||n==2)
i=1;
else
i=fibonacci(n-1)+fibonacci(n-2);
return i;
}
三:递归的总结
综上 总结一下递归函数优缺点:
——优点: 优点显得格外明显,就是代码简单明了,且清晰易懂。
——缺点:计算机在后台工作量十分庞大,函数调用的时候,每次调用时要做地址保存,参数传递等,如果递归调用N次,就要分配N次局部变量、N次形参、N次调用函数地址、N次返回值,势必效率低。
今天的博客到此结束咯!对博主的内容感兴趣的朋友可以看看往期博客,精彩不断!
1.解析数组野蛮题型 http://t.csdn.cn/26AqM
2.谁说代码不浪漫?http://t.csdn.cn/nHNkw
3.至高的美学—斐波那契 https://blog.csdn.net/m0_69097508/article/details/124208244
4.玩转辗转相除法 https://blog.csdn.net/m0_69097508/article/details/124052988