java 求次方_Java递归例子——求x的y幂次方
假设n的值大于0。
一:源程序:
View Code
packageone;publicclassRecursionTest {/***@paramargs*/publicstaticvoidmain(String[] args) {//TODO Auto-generated method stubRecursionTest rt=newRecursionTest();intx=6;inty=2;longresult=rt.getPower(x, y);
System.out.println("The result of"+x+"'s"+y+"times power ="+result);
}privatelonggetPower(intx,inty){if(y==0)return1;if(y==1)returnx;returnx*getPower(x, y-1);//36//return x*getPower(x, --y);//36//return x*getPower(x, y--);//Exception in thread "main" java.lang.StackOverflowError:当应用程序递归太深而发生堆栈溢出时,抛出该错误。}
}
求幂次方的递归实现方法1:
private long getPower(int x, int y){
if(y == 0) return 1;
if(y == 1) return x;
return x*getPower(x, y-1);
}
方法2:
private long getPower(int x, int y){
if(y == 0) return 1;
if(y == 1) return x;
return x*getPower(x, --y);
}
这两种方法应该是一样的,只不过写法不同。
至于下面的方法3:
private long getPower(int x, int y){
if(y == 0) return 1;
if(y == 1) return x;
return x*getPower(x, y--);
}
这种方法会抛出异常:Exception in thread "main" java.lang.StackOverflowError:当应用程序递归太深而发生堆栈溢出时,抛出该错误。
至于到底递归有多深呢?可以用下面的程序查看一下:
View Code
packageone;publicclassRecursionTest {/***@paramargs*/staticlongnum=0;publicstaticvoidmain(String[] args) {//TODO Auto-generated method stubRecursionTest rt=newRecursionTest();intx=6;inty=2;longresult=rt.getPower(x, y);
System.out.println("The result of"+x+"'s"+y+"times power ="+result);
}privatelonggetPower(intx,inty){
num++;
System.out.println("执行方法getPower的次数:"+num);if(y==0)return1;if(y==1)returnx;returnx*getPower(x, y--);
}
}
运行结果:
.......
执行方法getPower的次数:3393
执行方法getPower的次数:3394
执行方法getPower的次数:3395
执行方法getPower的次数:3396
执行方法getPower的次数:3397
执行方法getPower的次数:3398Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.ext.DoubleByteEncoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.ext.DoubleByteEncoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.PrintStream.newLine(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
at one.RecursionTest.getPower(RecursionTest.java:24)
at one.RecursionTest.getPower(RecursionTest.java:26)
at one.RecursionTest.getPower(RecursionTest.java:26)
at one.RecursionTest.getPower(RecursionTest.java:26)
........
方法4:据说可以节省运算时间和一半的运算量,我是在网上搜到的。
源程序:
View Code
packageone;publicclassRecursionTest {/***@paramargs*/publicstaticvoidmain(String[] args) {//TODO Auto-generated method stubRecursionTest rt=newRecursionTest();intx=6;inty=2;longresult=rt.getPower(x, y);
System.out.println("The result of"+x+"'s"+y+"times power ="+result);
}privatelonggetPower(intn,intm){assertm>=0;if(m==0)return1;if(m==1)returnn;longtemp=getPower(n,m/2);returnm%2==0?temp*temp: temp*temp*n;
}
}
方法4的参考出处:http://shenyu.iteye.com/blog/192063
java 求次方_Java递归例子——求x的y幂次方相关推荐
- Java递归例子——求x的y幂次方
假设n的值大于0. 一:源程序: View Code package one; public class RecursionTest { /** * @param args */ public sta ...
- java 交集_Java大集合求交集的方法比较
两个List集合求交集想必学过Java的都知道用系统自带的retainAll()方法,但是在数据量比较大时,这个方法效率并不高,利用空余时间研究了几种数据量较大时求两个集合交集的办法.本文主要研究了J ...
- Java降落伞_Java 小例子:轮询淘汰 | 学步园
一架飞机快要掉了,上面有 20 个人,但是只有 3 包降落伞.于是 20 个人凑成一圈,每数到第 7 个,就将他踢下去.--最后三包降落伞将落在哪几个人手里? 下面是示例代码.编写过程的录像在这里下载 ...
- java开方_java程序,求开方的详细代码
importjava.util.Scanner;publicclassno5{publicstaticvoidmain(String[]args){Scannerinput=newScanner(Sy ...
- Java中求一个数的幂次方
Java中求 m 的 n 次方不能使用 m^n,可使用 Math.pow(m, n) 来求m的n次方,求得结果为浮点类型.
- java逻辑值_java、 若x = 5,y = 10,则x y和x = y的逻辑值分别为 和 。...
int x = 5, y = 10;System.out.println(x=y); x 以下程序段的输出62616964757a686964616fe4b893e5b19e3133336337373 ...
- 月份java题_Java基础50道经典练习题(14)——求日期
package com.homework.test; import java.util.*; /* [程序 14 求日期] 题目:输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以 3 月 ...
- java css网页布局实例_java代码例子
JAVA 类名.方法名(这里面写的是什么)能不能写个代要是类名直接调用的方法,那这个方法就是静态的(static)方法,是不用new出新对象实例就可以直接调用的方法.看下面例子: class A{ p ...
- java如何实现e的次方_Java中怎样怎样算出求函数的幂次方?
展开全部 java中通常进行数学运算的东西都在Math类中,求函数的幂次方就是Math类中的pow方法:public static double pow(double a, double b), 返回 ...
最新文章
- mysql删除过期文件_关于保留最新文件或清除过期文件的简单总结
- 推荐个Spring Boot实现的开源公众号管理系统,当学习案例也不错!
- 源码分享,仿英雄联盟对战游戏!
- springboot事物注解不生效_springboot事务不生效的几种解决方案
- java+io+scanner_Java知识点总结(JavaIO- Scanner类 )
- 小强的HTML5移动开发之路(32)—— JavaScript回顾7
- HBase API 创建表
- 【F2FS LFS SSR】华为如何打造智能终端的有趣灵魂?(上)
- numpy数组拼接方法介绍
- js月份的计算公式_JavaScript getMonth() 方法
- 蛇哥开局两星机器人视频_腾讯内容开放平台
- Anntec ZKUXFT XT2 FGPA卡DPDK使用方法
- AnimationEvent 'XXX' has no receiver!
- 一文通俗搞懂线性无关特征向量个数≤特征值重数
- 基于SHCAN智能仪表的ECU检测系统ETest的开发
- MT8183核心板 MTK8183处理器规格参数
- css 导航栏下划线跟随效果,默认第一个li为选中状态
- 杰里芯片之高电平开关机(触摸IC)
- 马克斯-普朗克计算机科学研究所,GAMES Webinar 2018-38期 | 陈仁杰(德国马克斯普朗克计算机研究所)...
- C语言将分数转为小数