C代码:在递归调用中将表达式作为参数传递



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

递归函数是对自身执行调用的函数。调用没有什么特别之处,它只是一个常规函数调用,只是调用者和被调用者是一样的。因此,它会传递值,就像在其他所有函数调用中一样。

正确答案是4:
调用pow(5,12);执行% * /,并调用执行% * /pow(25,6);和执行% * / *pow(625,3);,并调用不执行的pow(390625,1);

如果你的意思是像%*或/这样的所有运算,答案是10。如果你只是指*和/答案是7。

相关内容

  • 没有找到相关文章

最新更新