C 代码 : Passing expression as an argument in recursion call

标签 c recursion parameter-passing generic-programming call-by-value

我在练习一些 C 问题时遇到了一个场景,其中递归函数使用表达式作为参数调用自身。

Pow(double x, unsigned n){ 
  .....
  .....
  return Pow(x*x,n/2);
 }

我的问题是参数是在评估表达式时传递的(x*x,如在按值调用中)还是这是一个惰性评估,即直到使用时才评估。

下面是问题的详细内容

查找调用 Pow(5.0,12) 后的乘法次数?

Pow(double x, unsigned n) { 
     if(n==0)   return 1;
     if(n==1)   return x;
     if(n%2==0) return Pow(x*x,n/2);
     else      
     return Pow(x*x,n/2)*x;
}

选项 5,6,8,12

最佳答案

C 中函数的所有参数都在函数被调用之前计算。

您示例中的评估和调用:

Pow(5, 12) = Pow(5 * 5, 6) = 
Pow(25, 6) = Pow(25 * 25, 3) =
Pow(625, 3) = Pow(625 * 625, 1) * 625

关于C 代码 : Passing expression as an argument in recursion call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25744854/

相关文章:

c - 如何通过串口将整数发送到arduino?

c - 位图for循环问题

c - 从文件中精确打印和扫描 (C)

javascript - 正负挑战

java - 数独解算器重复堆栈与尝试和失败技术

c - 如何更改作为参数传递的变量的值?

Powershell 启动进程脚本调用第二个脚本 - 如何只制作一个脚本

c - 关于传递在函数中创建的变量的问题

Java递归;我怎样才能简化我所拥有的?

python - SymPy:将任意符号列表/元组传递给求解函数