第3题:考查递归调用
int foo ( int x , int n)
{
int val;
val =1;
if (n>0)
{
if (n%2 == 1) val = val *x;
val = val * foo(x*x , n/2);
}
return val;
}
这段代码对x和n完成什么样的功能(操作)?
(a)x^n (x的n次幂) (b)x*n(x与n的乘积) (c) n^x(n的x次幂) (d)以上均不是
解答:
如果仅仅是解答题目的话,比较简单,就直接n=2,3,5替换一下,看结果如何;
//这个程序的非递归版本
int what ( int x , int n)
{
int val;
int product;
product =1;
val =x;
while(n>0)
{
if (n%2 == 1)
product = product*val; /*如果是奇数次幂, x(val)
要先乘上一次,;
偶数次幂,最后返回时才会到这里
乘以1*/
val = val* val;
n = n/2;
}
return product;
}