6 回答
TA贡献34条经验 获得超34个赞
1.递归函数是自身调用自身的函数;
2.每一个递归函数都必须有递归出口,且一般带有参数;
3.递归算法代码简洁,但复杂度高,对计算机资源的占用很大,能不用递归尽量不用递归。
下面给出一个利用递归算法求解的简单例子,程序调试运行过。
求解问题:求10以内任意正整数的阶乘。
代码:
#include <stdio.h> int f(int n) { if( n==1 ) return 1; //递归出口,当n=1时,返回1 else return n * f(n-1); //调用函数f本身,传入n-1,将求n的阶乘转化为求n乘以n-1的阶乘 } int main() { int n = 6; int sum = f(n); printf("sum = %d",sum); }
输出结果:
sum = 720
TA贡献1017条经验 获得超1032个赞
递归函数的使用分为两个部分,1)递归;2)回溯;
int getAge(int i){
if(i==1)
return 10;
else
return (2+getAge(i-1));
}
如上例如果主函数调用getAge函数int age=getAge(5);那么执行的时候,第一次i==5 return(2+getAge(4))你会发现getAge(4)还是调用该函数,下一步得到getAge(4)的函数返回值,这样一直到i==1时getAge函数有一个具体的返回值,而这个得到结束条件函数返回值的过程称为“递归”,然后就是计算具体的最终函数返回值,这个过程称为“回溯”;
如上例:return(2+getAge(4))——>return (2+2+getAge(3))——>return(2+2+2+getAge(2))——>return (2+2+2+2+getAge(1))——>return (2+2+2+2+10)
最后函数返回18
TA贡献4条经验 获得超1个赞
比如斐波那契函数
int Factorial(int n)
{
if(n==0||n==1)
return 1;
else
return n * Factorial(n-1)
}
意思就是调用Factorial(n)这个函数,如果n==0或n==1,直接返回1,否则返回n*Factorial(n-1),此时n*不变,继续调用Factorial(n-1),一直这样下去知道n==0或1为止,就是n*(n-1)*(n-2)。。。*1.
- 6 回答
- 3 关注
- 2355 浏览
添加回答
举报