第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;
}