c语⾔递归函数编程,c语⾔递归函数的使⽤⽅法
c语⾔的使⽤⽅法
发布时间:2020-06-11 09:39:53
来源:亿速云
阅读:157
作者:Leah
这篇⽂章给⼤家分享的是c语⾔递归函数的使⽤⽅法。⼩编觉得挺实⽤的,因此分享给⼤家做个参考。⼀起跟随⼩编过来看看吧。
递归就是⼀个过程或 函数 在其定义或说明中有直接或间接调⽤⾃⾝的⼀种⽅法;递归函数就是直接或间接调⽤⾃⾝的函数,也就是⾃⾝调⽤⾃⼰的过程。
1.Fibonacci数
我们直到Fibonacci数的递推公式为:F(0)=F(1)=1,F(n)=F(n-1)+F(n-2) n>=2;
这个明显地给出了递归边界n=0或1的时候F(n)的值,和递归逻辑F(n)=F(n-1)+F(n-2),即递推公式.所以这个递归函数不难书写
#includeusing namespace std;
int F(int n)//函数返回⼀个数对应的Fibonacci数{ if(n0 || n1)//递归边界
return 1; return F(n-1) + F(n-2);//递归公式}
int main(){ //测试
int n; while(cin >> n) cout << F(n) << endl;
return 0;
}
2.阶乘的递归公式:n*F(n-1)
代码如下:#includeusing namespace std;
int F(int n){ if(n==0)//递归边界
return 1;
return n*F(n-1);//递归公式}
int main(){ int n; cin >> n; cout << F(n) << endl;
return 0;
}
3.数组求和
给⼀个数组a[]:a[0],a[1],…,a[n-1]如何⽤递归的⽅式求和?
仍然是两个问题:递归边界和递归公式.
递归边界是什么?⼀时不容易想到,但是我们想到了求和,多个数的求和过程是什么,x,y,z,w⼿动求和的过程是什么?步骤如下:
x+y=a,任务变为a,z,w求和
a+z=b,任务变为b,w求和
b+w=c得出答案
思考⼀下,【得出答案】这⼀步为什么就可以得出答案呢?(废话?)是因为,⼀个数不⽤相加就能得出答案.
所以,递归的边界就是只有⼀个数.
所以,递归边界有了,那么递归公式呢?其实⼿动计算过程中,隐含了递归公式:
其中+为求两个数的和,F为求多个数的和的递归函数.代码如下:#includeusing namespace std;
int F(int a[],int start,int end){ if(start==end)//递归边界
return a[start];
return a[start] + F(a,start+1,end);//递归公式}
int main(){ int a[] = {1,2,3,4,5}; int s=0,e=4; cout << F(a,s,e) << endl;
return 0;
}
4.求数组元素最⼤值
⼿动求最⼤值的过程是什么,遍历+⽐较,过程如下:
例如,求3,2,6,7,2,4的最⼤值:先设置最⼤值max=-999999,然后将max和数组元素逐个(遍历)⽐较如果a[i]>max,则更新max的值为a[i],否则max不变,继续向后遍历,直到遍历结束.
max<3,则max=3
max>2,max=3不变
max<6,则max=6
max<7,则max=7
max>2,max=7不变
max>4,max=7不变
遍历结束,max=7为最⼤值.
和求和类似,递归的公式如下:c语言用递归函数求n的阶乘
其中max为求两个数的较⼤值函数,F为求多个数的最⼤值的递归函数.代码如下:#includeusing namespace std;
#define max(a,b) (a>b?a:b)
int F(int a[],int s,int e){ if(s==e) return a[s]; else if(s+1 == e)//递归边界
return max(a[s],a[e]);
return max(a[s],F(a,s+1,e));//递归公式}
int main(){ int a[] = {5,1,4,6,2}; int s = 0,e = 4; cout << F(a,s,e) << endl;
return 0;
}
以上就是c语⾔递归函数的使⽤⽅法介绍,详细使⽤情况还得要⼤家⾃⼰使⽤过才能知道具体要领。如果想阅读更多相关内容的⽂章,欢迎关注亿速云⾏业资讯频道!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论