代码细节需注意

将下面的代码变为递归函数循环
原来的代码:
// power.c -- 计算数值的整数次幂
#include <stdio.h>
#include <stdbool.h>
double power(double n, int p); // ANSI 原型
int main(void)
{
    double x, xpow;
    int exp;
    printf("Enter a number and the positive integer power");
    printf(" to which\nthe number will be raised. Enter q");
    printf(" to quit.\n");
    while (scanf("%lf%d", &x, &exp) == 2)
    {
        if(x==0) xpow=0;
        if(exp==0) xpow=1;
        else xpow = power(x,exp);   // 函数调用
        printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
        printf("Enter next pair of numbers or q to quit.\n");
    }
    printf("Hope you enjoyed this power trip -- bye!\n");
    return 0;
}
double power(double n, int p)  // 函数定义
{
    double pow = 1;
    int i;
    bool q;
    q=false;
    if(p<0) p=-p,q=true;
      for (i = 1; i <= p; i++)
       pow *= n;
     if(q)
      pow=1/pow;
    return pow;                // 返回pow值
}
改为递归循环
// power.c -- 计算数值的整数次幂
#include <stdio.h>
#include <stdbool.h>
double abc(double a,int b);
double power(double n, int p); // ANSI 原型
int main(void)
{
    double x, xpow;
    int exp;
    printf("Enter a number and the positive integer power");
    printf(" to which\nthe number will be raised. Enter q");
    printf(" to quit.\n");
    while (scanf("%lf%d", &x, &exp) == 2)
    {
        if(x==0) xpow=0;
        if(exp==0) xpow=1;
        else xpow = power(x,exp);   // 函数调用
        printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
        printf("Enter next pair of numbers or q to quit.\n");
    }
    printf("Hope you enjoyed this power trip -- bye!\n");
    return 0;
}
double power(double n, int p)  // 函数定义
{
    double pow;
    int i;
    bool q;
    q=false;
    if(p<0) p=-p,q=true;
    pow=abc(n,p);
    if(q) pow=1/pow;
    return pow;                // 返回pow值
}
double abc(double a,int b)
{
    double q;
    q=1;

    if(b>1)
       q=abc(a,b);
    b--;
    q*=a;
    return q;
}
时发现可运行但输入时会未响应
于是带入值 1 2
开始研究函数
原来是没注意b--使递归成了死循环
于是把b--;
放到q=abc(a,b);
后面还是不行,
就干脆放到if前面
运行通过
高级评论编辑器暂时无法加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赫敏璋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值