我正在练习一些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
答案 0 :(得分:5)
在调用函数之前,将对C中函数的所有参数进行求值。
示例中的评估和调用:
Pow(5, 12) = Pow(5 * 5, 6) =
Pow(25, 6) = Pow(25 * 25, 3) =
Pow(625, 3) = Pow(625 * 625, 1) * 625
答案 1 :(得分:2)
递归函数是一个对自身执行调用的函数。这个电话没什么特别之处,它只是一个普通的函数调用,只是调用者和被调用者一样。所以它通过值传递,就像在每个其他函数调用中一样。
答案 2 :(得分:0)
正确答案是4:
致电pow(5,12);
执行% * /
并致电pow(25,6);
% * /
并致电pow(625,3);
,% * / *
并致电pow(390625,1);
,这不是。
如果你的意思是所有的操作,例如%*或/答案是10.如果你只是表示*和/答案是7。