设计一个递归函数时,不需要对每一个递归调用都完整的跟踪一遍,唯一要做的是核实一下它是否满足一下三个条件:
1、没有无穷递归,保证有一个或多个条件不再进行递归调用,使递归有出口。
2、每一个递归出口都能得到一个正确的值或结果。
3、每一个牵涉到递归的情况,函数的计算方法和返回的值是正确的。
示例如下:
#include<iostream>
#include<cstdlib>
using namespace std;
double power(int x,int n);
int main()
{
int x,n;
cout<<"x=";
cin>>x;
cout<<"n=";
cin>>n;
cout<<power(x,n)<<endl;
return 0;
}
double power(int x,int n)
{
if(n<0&&x==0)
{
cout<<"illgel argument to power."<<endl;
exit(1);
}
if(n<0)
return (1/power(x,-n));3、计算方法正确,得到的返回值也正确
else if (n>0)
return (power(x,n-1)*x);//3、计算方法正确,得到的返回值也正确
else
return (1.0);//1、有递归出口(且仅有一个) 2、递归出口能返回正确的值
}