递归是一个非常重要的概念,但是并不是很好理解。
最常用的递归案例,就是求乘法的阶乘,例如求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文章
423浏览量
34548 -
printf函数
+关注
关注
0文章
31浏览量
5893
发布评论请先 登录
相关推荐
评论