一.定义
递归函数即自调用函数,在内部直接或者间接调用自身的函数,即函数的嵌套是函数本身。
二.分类
A.直接递归:函数中出现调用函数本身:
#include<iostream> using namespace std; long fib(int x) { if(x>2) return (fib(x-1)+fib(x-2)); else return 1; } int main() { int x; cin>>x; long y=fib(x);//定义一个新的变量来接收return返回的值,并将其结果输出。 cout<<y<<endl; return 0; }
B.间接递归:在a函数中调用了b函数,而在b函数中又调用了a函数:
int fn1(int a) { int b; b=fn2(a+1); } int fn2(int s) { int c; c=fn1(s-1); }
注意fn2函数的声明必须在fn1之前!!!
三.递归的条件:
#include<iostream> using namespace std; void count(int x)//递归函数可以无返回值 { if(x>1)//B count(x-1);//C else cout<<x<<endl;//A该句完成函数任务,即输出x<1时的值,与之前有返回值的递归函数不同 }
1.须有完成函数任务的语句。
如上注释A。
2.一个确定能否避免递归调用的测试,且必须先测试再递归,否则会导致无限递归,使栈空间溢出。
如上注释B。
3.一个递归调用语句,且递归调用语句的参数应该逐渐逼近不满足条件,最后断绝递归。
如上注释C。