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