版权声明:转载请注明来源~ https://blog.csdn.net/Lth_1571138383/article/details/80536267
/*
题目要求: 使用递归函数重写编程练习8。
*/
#include<stdio.h>
double power(double x, int y, const double first_x);
int main(void)
{
double value = 0;
double f = 0;
int m = 0;
double first_x = 0; // 保存求幂运算指数,为求幂运算而建立。
printf("Enter a number and to positive integer power to which.\n");
printf("The number will be raised. Enter q to quit.\n");
printf("Now, please enter number :");
while (scanf_s("%lf%d", &value, &m) == 2)
{
const double first_x = value; // 保存求幂运算指数。并用 const 锁定。
f = power(value, m, first_x);
if (f == 0)
{
printf("Please input again :");
continue;
}
else
{
// 空语句。
;
}
printf("%.3g to the power %d is %.5g \n\n", value, m, f);
printf("Enter next pair of numbers or q to quit :");
}
printf("Bye !\n");
return 0;
return 0;
}
double power(double x, int y, const double first_x)
{
double one = 1; // 计算负幂用。
int i = 1; // 对比 幂 的次数,递归处 if表达式 使用。
double value = 0; // 接受递归调用函数的返回值。
if (x == 0 && y == 0)
{
// 在指数为 0 , 0 次幂的情况下。报告 0 的 0 次幂未定义,把该值处理为 1。
}
else if (x == 0)
{
// 在指数为 0 时,报告 0 的任何次幂都为 0。
printf("0 的任何次幂都为 0, 请重新输入。\n");
}
else if (y == 0)
{
// 在幂为 0 的情况下, 报告任何数的0次幂都为1。
printf("任何数的0次幂都为1, 请重新输入。\n");
}
else
{
// 空语句。
;
}
/* point !! 本题核心。
本题要求以递归函数实现求幂运算。
递归的难处之一在于结点,即结束点。
本程序将以 求幂运算的 幂 的次数作为结点,
每递归一次该函数,则 进行一次求幂运算;相应的,幂的次数减1。
幂的次数为0 则结束递归。
*/
if (i != y)
{
// 每次递归,幂的次数 y 自减。减到0结束。
// first_x 为指数,为求幂运算而建立。
x *= first_x;
y--;
value = power(x, y, first_x);
}
else
{
value = x;
}
if ( first_x < 0 )
{
// 在指数小于0的情况下,即为负数。则进行负幂计算。
// (负幂计算即为 x的y次幂 求其幂的倒数即可得出。 )
value = one / value;
}
else
{
// 空语句。
;
}
return value;
}