递归,就是在运行的过程中调用自己。
问题:
现在有五个人,第五个人比第四个人大3岁,第四个人比第三个人大3岁,第三个人比第二个人大3岁,第二个人比第一个人大3岁,第一个人叫小明,他12岁(小明一直都没有长大啊哈哈哈),请问第五个人几岁?
这个问题就可以使用递归算法计算:
- int f(int n){
- if(n=1)
- return 12;
- else
- return f(n)+3;
- }
- int age = f(5);
- printf("第五个人的年龄是:%d\n",age);
复制代码 使用递归要注意:
1、当函数自己调用自己时,系统将自动把函数中当前的变量和形参暂时保留起来,在新一轮的调用过程中,系统为新调用的函数所用到的变量和形参开辟另外的存 储单元(内存空间)。每次调用函数所使用的变量在不同的内存空间。 2、递归调用的层次越多,同名变量的占用的存储单元也就越多。一定要记住,每次函数的调用,系统都会为该函数的变量开辟新的内存空间。
3、当本次调用的函数运行结束时,系统将释放本次调用时所占用的内存空间。程序的流程返回到上一层的调用点,同时取得当初进入该层时,函数中的变量和形参 所占用的内存空间的数据。
4、所有递归问题都可以用非递归的方法来解决,但对于一些比较复杂的递归问题用非递归的方法往往使程序变得十分复杂难以读懂,而函数的递归调用在解决这类 问题时能使程序简洁明了有较好的可读性;但由于递归调用过程中,系统要为每一层调用中的变量开辟内存空间、要记住每一层调用后的返回点、要增加许多额外的 开销,因此函数的递归调用通常会降低程序的运行效率。
|
|