递归函数最终会结束,那么这个函数一定(不定项选择)
1:使用了局部变量;
2:有一个分支不调用自身;
3:使用了全局变量或者使用了一个或多个参数;
第二个肯定是对的,就是不知道1、3是不是对的,大家能不能解释的详细点,谢谢了哈
[解决办法]
1 不对,局部变量明显会每次调用初始化,和3正好相反
[解决办法]
1是不对的,比如求阶乘的函数就可以不适用局部变量。
int fn(int n)
{
if(n == 1)
return 1;
else
return n * fn(n - 1);
}
3目前看是对的,没有找到反证。因为至少有一个变量起到向下级调用传值的功能。要么是参数,要么是全局变量。
int n = 10;
int sum()
{
if(n == 0)
return 0;
else
return (n-- + sum());
}
[解决办法]
3不对,虽然使用全局变量或使用一个或多个参数的确可以控制递归的结束,但不是只有这两种方式,而题目中指出了"一定"。
另外的方式有局部静态变量和异常。异常比如内存空间不足、除零异常都可以让递归函数终止。