众所周知,C++写任何代码之前都要有的头文件和命名空间

PS:此代码为实验多次反复修改的结果,如有误请在评论区指出,本人就一初学小菜鸟

还把题目和公式也放进去了

//4、用递归方法求x^n,x和n由键盘输入。递归公式为:
//             x            n = 1
//y = x^n =
//             x * x^(n - 1)           n > 1
//函数原型为: long xn(long, long);
#include <iostream>
using namespace std;

不管三七二十一,写完头文件和命名空间就把main函数,主函数里的框架补上

int main()
{system("pause");//按任意键继续return 0;//返回正常退出值
}

然后呢,题目不是讲要让用户输入两个值嘛,x和n

那么我们就创建两个变量,并且让用户有机会输入

PS:题目给定的函数类型是long,那我们就依葫芦画瓢,也用Long创建两个变量

int main()
{long x = 0;long n = 0;cout << "请输入需要计算的底数x: ";cin >> x;cout << "请输入次幂n: ";cin >> n;system("pause");return 0;
}

然后呢,就是让读者头痛的高数问题了,应该叫分段函数吧

求助于高中数学的残留记忆

不如,就像坐标轴一样,把n==0作为分界点,0和非0分成两个帮派

先把0零帮搞定

emmm,忘了个很重要的问题,得先创建一个xn函数体,给它传入两个参数吧,hiahia还是x,n,类型也是long

long xn(long x, long n)
{}

然后就是完善结构体啦

题目没有用void,所以就有返回值,我们就先让它return 0吧,hiahia很万能的返回正常退出值

long xn(long x, long n)
{return 0;
}

emmm,思索片刻,刚刚我们讲到把它分为两个帮派讨论

当n==0时,x^0,都是零

还少个变量来接受x,n他两的变化

那就来个跟题目一样的y吧

既然我们给了一个y是接受结果的,那我们也就明确点,给它点明了,我们要返回的就是y

long xn(long x, long n)
{int y = 0;if (n == 0)//如果次幂n是0,底数变为1并传递给接收结果的变量y{y = 1;//cout << "y = " << y << endl;}return y;
}

搞定了0帮,那我们还有个非0帮

非0帮又分为 左派和右派

左派呢就是0左边的一堆数组,负数啦,也就是n<0的情况

思路是整体分两帮,0帮和非0帮,所以非0的放else里

我们这里千万不要在每个条件语句里单独做反动分子私自输出哈,return这个老大哥会生气的哈

不信的话,试试也不会报错,只是,结果嘛,就是满足条件的都输出了

long xn(long x, long n)
{int y = 0;if (n == 0)//如果次幂n是0,底数变为1并传递给接收结果的变量y{y = 1;//cout << "y = " << y << endl;}else//n>1{if (n < 0)//n<0{x = 1 / x;n = -n;y = x * xn(x, n);//cout << "y = " << y << end;}}return y;
}

细化,非零,解决了做派负数,还有右派正数,正数又有一个1可以作为分界点,0到1之间

if之外的if  就是else if

这里为啥能用xn这个函数呢,emmm,就当他已经可以用了,梅开二度吧,具体原理,以我的能力,目前也解释不了(高手都在评论区)

long xn(long x, long n)
{int y = 0;if (n == 0)//如果次幂n是0,底数变为1并传递给接收结果的变量y{y = 1;//cout << "y = " << y << endl;}else//n>1{if (n < 0)//n<0{x = 1 / x;n = -n;y = x * xn(x, n);//cout << "y = " << y << endl;}else if (0 < n < 1){y = x * xn(x, 1 / n);}}return y;
}

0到1之间的解决了,那就还有一个1咯,n==1

那好办,底数x本身呗

long xn(long x, long n)
{int y = 0;if (n == 0)//如果次幂n是0,底数变为1并传递给接收结果的变量y{y = 1;//cout << "y = " << y << endl;}else//n>1{if (n < 0)//n<0{x = 1 / x;n = -n;y = x * xn(x, n);//cout << "y = " << y << endl;}else if (0 < n < 1){y = x * xn(x, 1 / n);}else if (n == 1)//n=1{y = x;//cout << "y = " << y << endl;}}return y;
}

最后一个右派就是,n>1啦,套公式

这里为什么用else if 而不用else,纯属个人习惯,习惯把控所有数字,给他们圈定一个范围,这里用else也可以

long xn(long x, long n)
{int y = 0;if (n == 0)//如果次幂n是0,底数变为1并传递给接收结果的变量y{y = 1;//cout << "y = " << y << endl;}else//n>1{if (n < 0)//n<0{x = 1 / x;n = -n;y = x * xn(x, n);//cout << "y = " << y << endl;}else if (0 < n < 1){y = x * xn(x, 1 / n);}else if (n == 1)//n=1{y = x;//cout << "y = " << y << endl;}else if (n > 1){y = x * xn(x, n - 1);//cout << "y = " << y << endl;}}return y;
}

到了这里我们的函数已经封装完成了,接下来就是调用了

它是不是有返回值,所以我们在main函数里给它创建一个接收函数里面的返回值y的一个,来个汇总sum吧

再传入我们让用户输入的两个值,就算大功告成啦

int sum=xn(x,n)

int sum;
sum=xn(x,n);
//或者直接一步到位
int sum=xn(x,n);

接下来,请欣赏全部代码

//4、用递归方法求x^n,x和n由键盘输入。递归公式为:
//             x            n = 1
//y = x^n =
//             x * x^(n - 1)           n > 1
//函数原型为: long xn(long, long);
//此代码为实验多次,反复修改的结果
#include <iostream>
using namespace std;long xn(long x, long n)
{int y = 0;if (n == 0)//如果次幂n是0,底数变为1并传递给接收结果的变量y{y = 1;//cout << "y = " << y << endl;}else//n>1{if (n < 0)//n<0{x = 1 / x;n = -n;y = x * xn(x, n);//cout << "y = " << y << endl;}else if (0 < n < 1){y = x * xn(x, 1 / n);}else if (n == 1)//n=1{y = x;//cout << "y = " << y << endl;}else if (n > 1){y = x * xn(x, n - 1);//cout << "y = " << y << endl;}}return y;
}int main()
{long x = 0;long n = 0;cout << "请输入需要计算的底数x: ";cin >> x;cout << "请输入次幂n: ";cin >> n;//scanf("%d%d\n", &x, &n);//录入用户输入的两个数据int sum=xn(x, n);cout << "y=" << sum << endl;//输出函数返回的结果,在最后一步统一输出,否则,每一个条件,只要n>1的都会输出system("pause");return 0;
}

C++用递归方法求x^n,x和n由键盘输入完整可运行源代码及过程相关推荐

  1. c语言用一维数组求十个数和,c语言 .从键盘输入10个整数,存到一维数组中,并求这10个整数的和?...

    #include"stdio.h" //从键盘输入10个数存入一维数组,求这10个数中的最大值和最小值并输出 int main() { int i; float max,min,n ...

  2. python怎么求圆柱表面积半径和高由键盘输入_从键盘上输入圆的半径,计算圆的周长和面积(使用符号常量)_学小易找答案...

    [单选题]Randal Ice needs a loan to purchase pet food and other pet supplies for his local pet store ove ...

  3. python怎么求圆柱表面积半径和高由键盘输入_Java圆柱体表面积和体积计算代码实例...

    题目描述 Java编程实现圆柱体表面积和体积的计算,要求从键盘上输入底面圆的半径和圆柱体的高,然后输出结果. 题目分析 首先定义Circle类,然后在main方法中创建Circle类的对象c,利用对象 ...

  4. C语言经典例26-利用递归方法求阶乘

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 利用递归方法求5!5!5!. 2 分析 我们知道0和1的阶乘都是1,用递归计算阶乘时,要递减的方式递归,到0或1的时候返回递归.该递归程序从 ...

  5. java 全排列 可重复_java 用递归方法求n个数的无重复全排列

    public class Permutation{ private int[] table; public Permutation(int n)                    // 构造方法 ...

  6. 递归算法经典实例_【经典算法】利用递归方法求5!

    找出数组只出现一次的数字 题目 利用递归方法求5! 示例: 输入: 5!输出: 120 思路: 当传入5时,5>1,所以返回recursion(4)*5; recursion(4)则调用recu ...

  7. 自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。

    自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比. 参考运行截图: ...

  8. 用递归方法求1到100的和

    用递归方法求1到100的和 public static void main(String[] args) {System.out.println(Sum(2));}public static int ...

  9. 用递归方法求前n个自然数的平方和

    题目要求:用递归方法求前n个自然数的平方和 分析:构造一个递归函数,当n>1的时候,则进行递归调用,当n=1的时候,停止递归:每次递归中,需要完成n*n+余下n-1个自然数的平方和的工作. 方法 ...

最新文章

  1. DatagridView自动充满屏幕,并能指定某列宽度
  2. java的编译代码混淆
  3. 【转】c++ http下载文件
  4. CF Round410 D. Mike and distribution
  5. 税务大厅计算机网络安全与管理,峡江县税务局多措并举加强网络安全和保密管理...
  6. PyCharm+Python3转换xls文件为xlsx文件格式
  7. FreeModbus源码获取
  8. jQuery性能优化指南(1)
  9. 基本机器学习算法思想以及编程实现
  10. Microsoft Office (2007) Open XML 文件格式
  11. 芒格:如何面对投资中的巨大回撤?
  12. bearer token头_接口认证方式:Bearer Token
  13. 0001-【linux系统】-用于生物信息分析该如何安装ubuntu系统?
  14. C++技术之一:C++类 _stdcall
  15. MongoDB 特殊索引
  16. 深度学习中关于 “深度” 的理解
  17. Linux0.11学习研究
  18. 全球害虫控制收入预计2028年达到231.6亿美元
  19. mars3d学习-方量分析
  20. 东方甄选双语直播火爆出圈,新东方转型初见端倪

热门文章

  1. Linux 学习 第六单元
  2. 东师计算机基础20春在线作业2,计算机应用基础(高起专)计算机应用基础东师20春在线作业2...
  3. 奥鹏计算机19在线作业答案,东师计算机应用基础19春在线作业1【标准答案】
  4. idea怎么设置热启动
  5. Tomcat 配置与部署
  6. 事件冒泡详解及阻止事件冒泡
  7. C语言--“.”与“-”有什么区别?
  8. quartz定时器时间设置规则
  9. 2020/7/17 积分不等式/反常积分/定积分应用
  10. yolo v4 weights 权重