一个自定义的函数可以被main函数和其它函数调用,如果自定义函数在函数体内调用它自身,我们就称为递归函数(recursion)。
例1:输入一个数n,求n+(n-1)+(n-2)…..1的和?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<iostream> using namespace std; int f(int a){ if(a==1)return 1; else return a+f(a-1); } int main(){ int n; cout<<"please input a number:"; cin>>n; cout<<f(n); } |
每一个递归函数都应该只进行有限次的递归调用,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。
要想让递归函数逐层进入再逐层退出,需要解决两个方面的问题:
1、存在终止条件,当符合这个条件时递归便不再继续。
2、每次递归调用之后越来越接近这个终止条件。
1、尾递归,也就是递归调用位于函数体的结尾处 ;
2、中间递归:发生递归调用的位置在函数体的中间;
3、多层递归:在一个函数里面多次调用自己。
递归函数的优缺点
所有递归都可以用循环实现