递归运算计算幂
用递归运算计算幂。例如, x^4 是 x^2 的平方,所以 x^4 可以用两次乘法计算,而不需要三次乘
法。这种方法甚至可以用于n 不是2 的幂的情况。
#include<stdio.h>
double power(int x, int y)
{
if (y==1)
{
return x;
}
else if(y==0)
return 0;
else
{
if (y % 2 == 0)
{
return power(x,y/2)*power(x,y/2);
}
else
{
return x*power(x,y-1);
}
}
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",power(a,b));
return 0;
} 你的代码基本上是正确的,只是需要对函数返回类型进行修改。因为结果可能是小数,所以将返回类型改为double。另外,要注意y为0的情况,应该返回1而不是0。
修改后的代码如下:
#include <stdio.h>
double power(int x, int y)
{
if (y == 1)
{
return x;
}
else if (y == 0)
{
return 1;
}
else
{
if (y % 2 == 0)
{
return power(x, y / 2) * power(x, y / 2);
}
else
{
return x * power(x, y - 1);
}
}
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%lf", power(a, b));
return 0;
}
现在你可以输入两个整数,然后程序会计算并打印出幂的值。注意,这里使用`%lf`来输出double类型的值。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 用递归,power() 不用写那么复杂吧?
#include <stdio.h>
int power(int a , int b)
{
return (b > 0) ? a * power(a , b - 1) : 1 ;
}
int main()
{
int a , b ;
scanf("%d%d",&a,&b) ;
printf("%d\n" , power(a , b)) ;
} jackz007 发表于 2024-4-16 17:10
用递归,power() 不用写那么复杂吧?
但要求不是这样,他比如说算x^4不需要算三次,而是在算了x^2后,直接再算(x^2)^2 greeen海 发表于 2024-4-17 13:21
但要求不是这样,他比如说算x^4不需要算三次,而是在算了x^2后,直接再算(x^2)^2
这个应该可以符合题意了
#include <stdio.h>
int power(int a , int b)
{
return (b > 0) ? ((b % 2 == 0) ? power(a * a , b / 2) : a * power(a , b - 1)) : 1 ;
}
int main()
{
int a , b ;
scanf("%d%d" , & a , & b) ;
printf("%d\n" , power(a , b)) ;
}
页:
[1]