0

我在练习一些 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

4

3 回答 3

5

C 中函数的所有参数都在调用函数之前进行评估。

您的示例中的评估和调用:

Pow(5, 12) = Pow(5 * 5, 6) = 
Pow(25, 6) = Pow(25 * 25, 3) =
Pow(625, 3) = Pow(625 * 625, 1) * 625
于 2014-09-09T12:46:19.617 回答
2

递归函数是对自身执行调用的函数。调用没什么特别的,就是普通的函数调用,只是调用者和被调用者是一样的。所以它确实按值传递,就像在其他所有函数调用中一样。

于 2014-09-09T12:42:56.733 回答
0

正确答案是 4:
调用pow(5,12);% * /和调用pow(25,6);哪个做% * /和调用pow(625,3);,哪个做% * / *和调用pow(390625,1);,哪个不做。

如果您的意思是 % * 或 / 之类的所有操作,答案是 10。如果您只表示 * 和 / 答案是 7。

于 2014-09-09T13:03:05.807 回答