电子说
递归是一个非常重要的概念,但是并不是很好理解。
最常用的递归案例,就是求乘法的阶乘,例如求n!的值。
n=1
n=1*2
n=1*2*3
n=1*2*3*4
...
这个乘法问题,是在前一个乘法的基础上,再做乘法运算,也就是
fun(n)=fun(n-1) * n
这就是递归的公式,我们只要确定了fun()的实现,就能够求出所有的值。
#include
int fun(int n){
if(n == 1) return 1;
return fun(n-1) * n;
}
int main(){
printf("%d\\n", fun(5));
return 0;
}
在这个案例中,设n=5,他的执行过程如图所示。
由外到里,再由里到外。
在设计递归算法的时候,需要注意,必须有出口条件,本案例中,阶乘的出口条件是n=1的时候,乘积为1
再看一个案例,例如,要求一个复杂的多项式
F(1)=1,F(2)=1
F(n)=F(n-1)+F(n-2) n>2 求F(6) = ?
根据数学方程,实现起来也非常简单
#include
int f(int n){
if(n == 1) return 1;
if(n == 2) return 1;
return f(n-1) + f(n-2);
}
int main(){
printf("%d\\n", f(6));
return 0;
}
执行过程如图所示。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !