【发布时间】:2018-02-05 14:16:36
【问题描述】:
我有一个关于返回函数本身的值的简单问题。当然,函数是递归的。 例如:
int CountDigs(int n)
{
int dig=n%10;
if(n < 10) return 0;
if( (n/10)%10 > dig )
return CountDigs(n/10)+1;
return CountDigs(n/10);
}
我通常返回一个数字或一个变量,所以这是我第一次看到这个。有人可以请解释“+1”的值存储在内存中的位置,为什么我不应该创建一个存储摘要的变量?
更具体地说,我为相同的解决方案而疯狂:
int counting_function(int n)
{
int sum;
if (n>=9)
return 0;
sum = counting_function (n/10);
if (n%10 < n/10%10)
{
sum++;
return sum;
}
return sum;
}
【问题讨论】:
-
您的函数不会返回自身。它返回调用自身的结果,或与之相关的值。这是完全不同的事情。
-
您不是在返回函数,而是在返回函数返回的值。 result 与
int result = CountDigs(n/10)+1; return result;相同 -
您的函数不收敛:
counting_function(0);永远不会完成:0 小于 9,因此函数以 0/10=0 等递归调用。实际上,任何低于 9 的数字永远不会完成,任何超过 8 的数字都会立即完成。 -
这是重复的吗?
-
@AdrianMaire 哈哈,我没注意到,这是键盘错误。