1.递归一定要有退出条件,否则将无限循环。
2.关于递归的返回值是要注意的。
下面列举两种方法,原理相同,递归判断。
方法1:
bool charge(int p[],int n)
{
static int m=0; //这个一定要定义为static,否则每次调用都是从0开始。
if(m == n-1)
return true;
else
{
if(p[m]<p[m+1])
{
m=m+1;
return charge(p,n); //最初是没有把charge(p,n)作为return语句,这样,我在内层递归结束,返回结果后,调用的程序不知道该怎么返回结果了。只有这样将内存递归结果做为返回值返回给上层,这样可以保证返回值结果是一致的,也是想要的。
}
else
return false;
}
}
int main()
{
int a[5]={1,2,3,5,4};
bool flag=false;
flag=charge(a,5);
if (flag)
printf(“yes\n”);
else
printf(“false\n”);
system(“pause”);
return 0;
}
方法2:
bool charge(int p[],int n)
{
if(n==1)
return true;
else
{
if(p[n-1]>p[n-2])
{
return charge(p,n-1);
}
else
return false;
}
}