递归算法的介绍
递归算法,可以说是一个运算效率低,但很好理解,而且应用广泛的算法。在一个函数中再次调用自身则是为递归算法。本次依然用阶乘做例子;但采用递归算法,显得更简洁,但递归的函数内部运行个人认为对初学者来说理解有一定的难度;一级一级的递归后,返回值也是逐级返回知道最外围得返回值则是我们所求;同时递归函数一定需要一个退出条件;下面是我的程序:请大家批评指正:
#include<stdio.h>
int main()
{
int n,result;
int factorial(int x);
scanf("%d",&n);
result=factorial(n);
printf("%d\n",result);
}
int factorial(int x)
{
int z;
if(x<0)
int main()
{
int n,result;
int factorial(int x);
scanf("%d",&n);
result=factorial(n);
printf("%d\n",result);
}
int factorial(int x)
{
int z;
if(x<0)
{
printf("error\n");
}
else if(x==0||x==1) //这是一个退出条件,当调用到F1时,此时z=f1*2,这一层的Z是等于2*f1进行下一次运算,此时实参X=1;
{ //满足条件z=1; 其实我们是吧F(n)值赋给Z,所以此时Z代表的是F1 ,我们要求的是F5,也就
//是最外层的Z,所以逐次返回到最外层得到F5=Z(最外层)=120
z =1;
}
else
{
z=factorial(x-1)*x; //当x=5时,F5=F4*5,然后程序递归调用F4,判定之后F5=F3*4*5...最后当(x-1)=1时
} //用单步进入函数,可知道Z=1时终止递归的信号,之后回逐级RETURN回到最外围的Z=120
return z;
}
printf("error\n");
}
else if(x==0||x==1) //这是一个退出条件,当调用到F1时,此时z=f1*2,这一层的Z是等于2*f1进行下一次运算,此时实参X=1;
{ //满足条件z=1; 其实我们是吧F(n)值赋给Z,所以此时Z代表的是F1 ,我们要求的是F5,也就
//是最外层的Z,所以逐次返回到最外层得到F5=Z(最外层)=120
z =1;
}
else
{
z=factorial(x-1)*x; //当x=5时,F5=F4*5,然后程序递归调用F4,判定之后F5=F3*4*5...最后当(x-1)=1时
} //用单步进入函数,可知道Z=1时终止递归的信号,之后回逐级RETURN回到最外围的Z=120
return z;
}
本程序得重点在于,递归时,随着X实参变化,逐步调用函数时,应该用单步进入函数F8,递归的