c - 返回函数本身作为返回值

标签 c recursion

我有一个关于返回函数本身值的简单问题。该函数当然是递归的。 例如:

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;
}

最佳答案

return 语句返回一个值时,该值由表达式指定。该表达式可以是一个简单的表达式,例如常量或变量名,但不一定是。它可以是任何合适类型的有效表达式。

Someone can please explain where the value of "+1" stores at the memory,

这取决于编译器,但加 1 的结果可能不会存储在系统内存中。更有可能的是,它永远不会离开 CPU。

and why shouldn't I create a variable that stores the summary?

将结果存储在变量中,然后使用变量的名称作为 return 表达式,本质上并没有错。在某些情况下,这可能更清楚。然而,即便如此,该值也可能不会实际存储到系统内存中。但是,如果它 存储到系统内存中,那么这将比不存储更耗时。

这里要理解的关键是 return 语句指定一个 value 直接返回,而不是间接返回。在大多数情况下,对于大多数编译器,这样的返回值是通过 CPU 寄存器而不是系统内存传递给调用者的,尤其是您表示熟悉的情况。

关于c - 返回函数本身作为返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48624561/

相关文章:

c - 使用 OpenGL 渲染时加载多线程对象

c - C 中的结构和指针 - 使用 strcpy 时崩溃

c - openmp指针问题

python - 使用匿名lambda实现阶乘函数的python代码的解释是什么

c - 系统调用和中断的实现有何不同?

c - 如何确定结构的内存布局?

algorithm - 如何阻止惰性求值减慢分而治之算法的速度

c++ - C++中的递归归并排序

python - Python中的并行递归函数

c# - 检测 C# 代码中的递归调用