C++用递归方法求x^n,x和n由键盘输入完整可运行源代码及过程
众所周知,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由键盘输入完整可运行源代码及过程相关推荐
- c语言用一维数组求十个数和,c语言 .从键盘输入10个整数,存到一维数组中,并求这10个整数的和?...
#include"stdio.h" //从键盘输入10个数存入一维数组,求这10个数中的最大值和最小值并输出 int main() { int i; float max,min,n ...
- python怎么求圆柱表面积半径和高由键盘输入_从键盘上输入圆的半径,计算圆的周长和面积(使用符号常量)_学小易找答案...
[单选题]Randal Ice needs a loan to purchase pet food and other pet supplies for his local pet store ove ...
- python怎么求圆柱表面积半径和高由键盘输入_Java圆柱体表面积和体积计算代码实例...
题目描述 Java编程实现圆柱体表面积和体积的计算,要求从键盘上输入底面圆的半径和圆柱体的高,然后输出结果. 题目分析 首先定义Circle类,然后在main方法中创建Circle类的对象c,利用对象 ...
- C语言经典例26-利用递归方法求阶乘
目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 利用递归方法求5!5!5!. 2 分析 我们知道0和1的阶乘都是1,用递归计算阶乘时,要递减的方式递归,到0或1的时候返回递归.该递归程序从 ...
- java 全排列 可重复_java 用递归方法求n个数的无重复全排列
public class Permutation{ private int[] table; public Permutation(int n) // 构造方法 ...
- 递归算法经典实例_【经典算法】利用递归方法求5!
找出数组只出现一次的数字 题目 利用递归方法求5! 示例: 输入: 5!输出: 120 思路: 当传入5时,5>1,所以返回recursion(4)*5; recursion(4)则调用recu ...
- 自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。
自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比. 参考运行截图: ...
- 用递归方法求1到100的和
用递归方法求1到100的和 public static void main(String[] args) {System.out.println(Sum(2));}public static int ...
- 用递归方法求前n个自然数的平方和
题目要求:用递归方法求前n个自然数的平方和 分析:构造一个递归函数,当n>1的时候,则进行递归调用,当n=1的时候,停止递归:每次递归中,需要完成n*n+余下n-1个自然数的平方和的工作. 方法 ...
最新文章
- DatagridView自动充满屏幕,并能指定某列宽度
- java的编译代码混淆
- 【转】c++ http下载文件
- CF Round410 D. Mike and distribution
- 税务大厅计算机网络安全与管理,峡江县税务局多措并举加强网络安全和保密管理...
- PyCharm+Python3转换xls文件为xlsx文件格式
- FreeModbus源码获取
- jQuery性能优化指南(1)
- 基本机器学习算法思想以及编程实现
- Microsoft Office (2007) Open XML 文件格式
- 芒格:如何面对投资中的巨大回撤?
- bearer token头_接口认证方式:Bearer Token
- 0001-【linux系统】-用于生物信息分析该如何安装ubuntu系统?
- C++技术之一:C++类 _stdcall
- MongoDB 特殊索引
- 深度学习中关于 “深度” 的理解
- Linux0.11学习研究
- 全球害虫控制收入预计2028年达到231.6亿美元
- mars3d学习-方量分析
- 东方甄选双语直播火爆出圈,新东方转型初见端倪
热门文章
- Linux 学习 第六单元
- 东师计算机基础20春在线作业2,计算机应用基础(高起专)计算机应用基础东师20春在线作业2...
- 奥鹏计算机19在线作业答案,东师计算机应用基础19春在线作业1【标准答案】
- idea怎么设置热启动
- Tomcat 配置与部署
- 事件冒泡详解及阻止事件冒泡
- C语言--“.”与“-”有什么区别?
- quartz定时器时间设置规则
- 2020/7/17 积分不等式/反常积分/定积分应用
- yolo v4 weights 权重