第1关:编写递归函数方法求x的n次方 (要求n>=0)


任务描述

本关任务:编写递归函数方法求x的n次方 (要求n>=0)。

相关知识

递归法

在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归

若调用自身,称之为直接递归。若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归

下面主要介绍直接递归。

一般地,递归模型由两部分组成,一部分为递归出口,它给出了递归的终止条件。另一部分为递归体,它确定递归求解时的递推关系。

例如:计算n阶乘的程序在数学上可以定义为:

fact(n)={1n×fact(n−1)​n=0n>0​

则递归算法求n阶乘的伪代码为:

 
  1. int fact(int n){
  2. if(n == 0)
  3. return 1;
  4. else
  5. return n * fact(n - 1);
  6. }

上面例子中的f(0)=1就是递归出口; f(n)=n*f(n-1)就是递归体。

要注意一下两点:

  • 递归调用的次数必须是有限的。
  • 必须有结束递归的条件来终止递归。

递归算法求解过程的特征:

  • 先将不能直接求解的问题转换成若干个相似的小问题,通过分别求解各子问题,最后获得整个问题的解。
  • 当这些子问题不能直接求解时,还可以再将它们转换成若干个更小的子问题,如此反复进行,直到遇到递归出口为止。
  • 这种自上而下将问题分解、求解,再自上而下引用、合并,求出最后解答的过程称为递归求解过程。这是一种分而治之的算法设计方法。

求x的n次方的求解过程可以写出递归定义:

递归

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:

测试输入: 2.3,5 预期输出: 64.363430

测试输入: 2.3,-5 预期输出: n<0,data error!

#include <stdio.h>
double power(double x,int n)
{
    /********** Begin **********/  
    double result = 1.0;
    if (n < 0)
    {
        printf("n<0,data error!\n");
        return 0;
    }
    else
    {
        for (int i = 0; i < n; ++i)
        {
            result *= x;
        }
        return result;
    }
    /********** End **********/
}

int main( )
{ 
    int n; 
    double  x, y;
    scanf("%lf,%d",&x,&n);
    y = power(x,n);
    if(y!=0)
    {
    	printf("%lf\n",y);
    }
    return 0;
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值