作业标题
递归实现n的k次方
作业内容
编写一个函数实现n的k次方,使用递归实现。
2.解题思路
首先有三种情况:
k = 0 时,n = 1
k > 0 时,n^k = n^k = n*n^(k-1)
k < 0 时,n^k = 1.0 / n^(-k)
需要实现实现n的k次方,那么我们就要输入两个数n和k。
因为要递归实现,我们就需要用到一个函数,来进行递归。
这个函数里面要分上面说的3个情况,具体情况我后面会具体讨论。
3.具体代码
float Pow(int n, int k)
{
if (k == 0)
return 1;
else if (k > 0)
return n * Pow(n, --k);
else
return 1.0 / Pow(n, -k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
float a = Pow(n, k);
printf("%f", a);
return 0;
}
打印:
3^(-3) | 3^3 |
4.代码讲解
这里main函数比较简单,我们就来看一下Pow函数 。
float Pow(int n, int k)
{
if (k == 0)
return 1;
else if (k > 0)
return n * Pow(n, --k);
else
return 1.0 / Pow(n, -k);
}
-
如果k等于0,根据数学规则,任何数的0次幂都是1,所以直接返回1。
-
如果k大于0,函数会递归调用自身,每次调用将k减1,并将结果乘以n。这样可以逐步计算出n的k次幂。
例如:如果要调用3^3,那么
float a = Pow(3, 3) =3*Pow(3, 2) =3*3*Pow(3, 1) =3*3*3*Pow(3, 0) =3*3*3*1 =27
-
如果k小于0,函数会递归调用自身计算n的-k次幂,然后返回1除以这个结果。这是因为n的-k次幂等于1除以n的k次幂。
例如:如果要调用3^(-3),那么
float a = Pow(3, -3) =1.0/Pow(3, 3) =1.0/(3*Pow(3, 2)) =1.0/(3*3*Pow(3, 1)) =1.0/(3*3*3*Pow(3, 0)) =1.0/(3*3*3*1) =1.0/27 =0.037037