练习1—参数传递、递归调用(Java)
1.方法参数的值传递机制
1.说明
方法:必须由其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数;
实参:方法调用时实际传给形参的参数值
- Java的实参值如何传入方法:Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本传入方法内,而参数本身不受影响。
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参;
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参。
2.例题
1.如下要求
(1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积。
(2)定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义如下:public void printAreas(Circle c, int time)在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
(3)在main方法中调用printAreas()方法,调用完毕后输出当前半径值。
代码:
//定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个
//findArea()方法返回圆的面积。
public class Circle { double radius;
public double findArea(){
double m=Math.PI*radius*radius; return m;
} // public static void main(String[] args) {
// Circle c1=new Circle();
// c1.radius=12;
// c1.findArea();
// System.out.println(c1.findArea());
// }
}
//Circle
//(2)定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义
//如下:public void printAreas(Circle c, int time)
//在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。
//例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
// (3)在main方法中调用printAreas()方法,调
//用完毕后输出当前半径值。程序运行结果如图
//所示
import java.util.Scanner; public class PassObject { public void printAreas(Circle c,int time ){
Circle c3 = new Circle();
System.out.println("Radius\t\t"+"Ares");
for (int i=0;i<=time;i++)
{
c3.radius=i;
double s=c3.findArea(); System.out.println( c3.radius+"\t\t\t"+s);
}
System.out.println("now radius is:"+(c3.radius+1)); } public static void main(String[] args) {
PassObject p1=new PassObject();
Circle c2=new Circle();
p1.printAreas(c2,5); } }
运行结果:

2.请用Java写出递归求阶乘(n!)的算法 。
代码:
public class recursionTest1 {
public int ff(int n)
{
if (n==1)
{
return 1;
}else
{
return n*ff(n-1);
}
}
public static void main(String[] args) {
recursionTest1 re=new recursionTest1();
int s=re.ff(10);
System.out.println(s);
}
}
运行结果:

3.已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值。
代码:
public class recursionTest2 {
public int recursion2(int m)
{
if (m==0)
{
return 1;
}else if (m==1)
{
return 4;
}else
{
return 2*recursion2(m-1)+recursion2(m-2);
}
}
public static void main(String[] args) {
recursionTest2 re2=new recursionTest2();
int x=re2.recursion2(10);
System.out.println(x);
}
}
运行结果:

4.已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n),
其中n是大于0的整数,求f(10)的值。
代码:
public class recursionTest3 {
public static void main(String[] args) {
recursionTest3 re3=new recursionTest3();
System.out.println("f(10)="+re3.jj(10));
System.out.println("f(9)="+re3.jj(9));
System.out.println("f(8)="+re3.jj(8));
System.out.println("f(11)="+re3.jj(11));
System.out.println("f(12)="+re3.jj(2));
}
public long jj(int x)
{
if (x==21)
{
return 4;
}else if (x==20)
{
return 1;
}else if (x<20)
{
return jj(x+2)-(2*jj(x+1));
}else
{
return 2*jj(x-1)+jj(x-2);
}
}
}
运行结果:

5.输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值1 1 2 3 5 8 13 21 34 55
规律:一个数等于前两个数之和要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来。
代码:
public class recursionTest4 {
public int Fibonacci(int f)
{
int num=0;
if (f==1)
{
return 1;
}else if (f==2)
{
return 1;
}else
{
return Fibonacci(f-1)+Fibonacci(f-2);
}
}
public static void main(String[] args) {
recursionTest4 re4=new recursionTest4();
int x=re4.Fibonacci(8);
System.out.println("第八位为:"+x);
int m=8;
System.out.println("打印前八位:");
for (int i=1;i<=m;i++)
{
System.out.print(re4.Fibonacci(i)+"\t");
}
}
}
运行结果:

练习1—参数传递、递归调用(Java)的更多相关文章
- java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题
/* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ impo ...
- JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- Java 递归调用 recursive 给一个参数 返回一大堆
需求: 需要组装成对象多层嵌套式的 json字符串; 想到使用 递归来完成这个多层嵌套: 憋了四个小时,终于写出来了; 先看效果: 数据库中的数据: 拼装后的效果: [ EmpVO{ ename='孙 ...
- Java中的递归调用
Java中不合理的使用递归调用,可能会导致栈内存溢出,这点是需要注意的. java将为每个线程维护一个栈,栈里将为每个方法保存一个栈帧,栈帧代表了一个方法的运行状态. 也就是我们常说的方法栈.最后一个 ...
- Java中函数的递归调用
说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...
- [复习] JAVA 遍历目录 (递归调用和非递归)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- 慎用Java递归调用
总结:慎用Java递归调用,测试时可以尝试该方法,否则尽量不要使用递归!递归过多调用时,最好改为for或者whlie来代替. 在java语言中,使用递归调用时,如果过多的调用容易造成java.lang ...
- Java递归调用
6.递归调用 方法的递归调用就是方法自身调用自身. 以下程序因为递归没有结束的条件,所以一直压栈,没有弹栈,导致栈内存溢出错误!所以递归必须要有结束条件. public class Recursion ...
- java——递归调用
递归函数调用调用本身,并通过自己的相应参数,这个计算过程中进行层,直到满足某些条件,只要停止呼叫. 递归函数的特点 1.函数要直接或间接调用自身. 2.要有递归终止条件检查.即递归终止的条件被满足后. ...
- Java面向对象---方法递归调用
递归调用是一种特殊的调用形式,即方法自己调用自己 public int method(int num){ if(num==1){ return 1; } else { return num+metho ...
随机推荐
- BZOJ1001 狼抓兔子(网络流转最短路:对偶图)
题意: 给一个如图形式的\(n*m\)的方格,从左上走到右下,给出边权,问分成两块所需的最小代价.\(n,m\leq1000\). 思路: 显然是个最小割,但是\(O(n^2m)\)的复杂度很高,虽然 ...
- shiro<1.2.4反序列化分析
0x01.环境搭建 下载地址:https://codeload.github.com/apache/shiro/zip/shiro-root-1.2.4 环境:Tomcat 8.5.27 + idea ...
- ECMAScript 2021 新特性
ECMAScript 2021 新特性 refs https://codeburst.io/exciting-features-of-javascript-es2021-es12-1de8adf655 ...
- django学习-15.ORM查询方法汇总
1.前言 django的ORM框架提供的查询数据库表数据的方法很多,不同的方法返回的结果也不太一样,不同方法都有各自对应的使用场景. 主要常用的查询方法个数是13个,按照特点分为这4类: 方法返回值是 ...
- pycharm + git+gitlab的可视化界面操作
前言: 写这篇博客,主要为了记录一套经过本人实践,并运行通过的操作gitlab流程. 通过以下步骤,可实现最基本的远程服务器(gitlab)和本地工具(pycharm)的,针对两端文件增删改查的及 ...
- spring学习路径
1.https://zhuanlan.zhihu.com/p/72581899 spring 要点记录: (1)Web服务器的作用说穿了就是:将某个主机上的资源映射为一个URL供外界访问. (2)通过 ...
- 【Azure 云服务】如何从Azure Cloud Service中获取项目的部署文件
问题描述 在历史已经部署的云服务(Azure Cloud Service)中,如何获取到项目在很久以前的部署包文件呢? 解决办法 1)如果部署云服务是通过门户上传部署包到存储账号中,则可以直接从存储账 ...
- PyTorch 自定义数据集
准备数据 准备 COCO128 数据集,其是 COCO train2017 前 128 个数据.按 YOLOv5 组织的目录: $ tree ~/datasets/coco128 -L 2 /home ...
- SpringBoot读取资源目录下的文件
需要读取resources目录下的文件,那么方法如下: 假设在资源目录下的template目录下有一个文件a.txt,获取到文件流的方式 InputStream stream = this.getCl ...
- 授权认证登录之 Cookie、Session、Token、JWT 详解
一.先了解几个基础概念 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份. 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就 ...