要想使用函数递归实现n的m次方计算,可以设计函数时,可以先储存一个c值为1,每次调用c都要乘以一个n,再将m的值减一,还要将m的值当作if的判断条件,当m为0时,函数便不再继续调用,此时原本为1的c也就乘以了m次的n。
如代码所示:
#include <stdio.h>
int c = 1;
int cifang(int x,int y)//函数的递归实现n的m次方。
{
if (y)
{
c *= x;
y--;
cifang(x, y);
}
return c;
}
int main()
{
int n = 0;
int m = 0;
scanf("%d", &n);
scanf("%d", &m);
int q = cifang(n,m);
printf("%d", q);
return 0;
}
int c = 0放在外面的原因是,如果放在函数里面,每次调用函数,c都会被重新赋值为1,便不能完成n乘积的累积。
但是,这种方法只能用来计算m大于零的情况,当m小于零或等于零时计算便不能成功,所以也不能忘了计算m<=0的情况。
正确代码入下图所示:
#include <stdio.h>
int c = 1;
double cifang(int x, int y)//函数的递归实现n的m次方。
{
if (y >= 0)
{
if (y > 0)
{
if (y)
{
c *= x;
y--;
cifang(x, y);
}
return c;
}
else if (y = 0)
{
return 1.00;
}
}
else if (y < 0)
{
return 1.00 / (cifang(x, -y));
}
}
int main()
{
int n = 0;
int m = 0;
scanf("%d", &n);
scanf("%d", &m);
double q = cifang(n, m);
printf("%.2lf", q);
return 0;
}
要直接记后面的正确代码未免有一些难,所以可以先记m>0的情况,再做修改,加上m<=0的情况。