1.方法参数的值传递机制

1.说明

    • 方法:必须由其所在类或对象调用才有意义。若方法含有参数:

      1. 形参:方法声明时的参数;

      2. 实参:方法调用时实际传给形参的参数值

    • 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)的更多相关文章

  1. java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

    /* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ impo ...

  2. JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  3. Java 递归调用 recursive 给一个参数 返回一大堆

    需求: 需要组装成对象多层嵌套式的 json字符串; 想到使用 递归来完成这个多层嵌套: 憋了四个小时,终于写出来了; 先看效果: 数据库中的数据: 拼装后的效果: [ EmpVO{ ename='孙 ...

  4. Java中的递归调用

    Java中不合理的使用递归调用,可能会导致栈内存溢出,这点是需要注意的. java将为每个线程维护一个栈,栈里将为每个方法保存一个栈帧,栈帧代表了一个方法的运行状态. 也就是我们常说的方法栈.最后一个 ...

  5. Java中函数的递归调用

    说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...

  6. [复习] JAVA 遍历目录 (递归调用和非递归)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  7. 慎用Java递归调用

    总结:慎用Java递归调用,测试时可以尝试该方法,否则尽量不要使用递归!递归过多调用时,最好改为for或者whlie来代替. 在java语言中,使用递归调用时,如果过多的调用容易造成java.lang ...

  8. Java递归调用

    6.递归调用 方法的递归调用就是方法自身调用自身. 以下程序因为递归没有结束的条件,所以一直压栈,没有弹栈,导致栈内存溢出错误!所以递归必须要有结束条件. public class Recursion ...

  9. java——递归调用

    递归函数调用调用本身,并通过自己的相应参数,这个计算过程中进行层,直到满足某些条件,只要停止呼叫. 递归函数的特点 1.函数要直接或间接调用自身. 2.要有递归终止条件检查.即递归终止的条件被满足后. ...

  10. Java面向对象---方法递归调用

    递归调用是一种特殊的调用形式,即方法自己调用自己 public int method(int num){ if(num==1){ return 1; } else { return num+metho ...

随机推荐

  1. CSS 解决Float后塌陷问题

    当父级元素没有设定高度时候,而子集元素设定float类型时候,此时父级元素不能靠子集元素撑起来,所以就形成了塌陷: 示例分析 **1.Float之前的效果** <!DOCTYPE html> ...

  2. HDU4578 Transformation(多标记线段树)题解

    题意: 操作有:\(1\).区间都加\(a\):\(2\).区间都乘\(a\):\(3\).区间都重置成\(a\):\(4\).询问区间幂次和\(\sum_{i=l}^rnum[i]^p(p\in\{ ...

  3. how to auto open demo and create it in a new codesandbox

    how to auto open demo and create it in a new codesandbox markdown & iframe https://ant.design/do ...

  4. js 深入原理讲解系列-currying function

    js 深入原理讲解系列-currying function 能看懂这一题你就掌握了 js 科里函数的核心原理 不要专业的术语,说人话,讲明白! Q: 实现 sum 函数使得以下表达式的值正确 cons ...

  5. Self-publishing 自出版

    Self-publishing 自出版 出书 传统出版 在过去的几十年中,发布意味着要经过代理商和发布者. 自出版 如今,自助出版允许作者绕过出版商和书店,直接向公众出售. refs https:// ...

  6. 如何用 js 实现一个 apply 函数

    如何用 js 实现一个 apply 函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referen ...

  7. Webpack 4.x 默认支持 ES6 语法

    Webpack 4.x 默认支持 ES6 语法 Q: 为什么 webpack4 默认支持 ES6 语法的压缩? A: terser 里面实现了 ES6 语法的 AST解析. webpack 4 里使用 ...

  8. Web 前端必备的各种跨域方式汇总

    Web 前端必备的各种跨域方式汇总 跨域方式汇总 同源策略 协议相同 + 域名相同 + 端口相同 https://www.xgqfrms.xyz/index.html https://www.xgqf ...

  9. HTML Custom Elements & valid name

    HTML Custom Elements & valid name valid custom element name https://html.spec.whatwg.org/multipa ...

  10. vue3 deep dive

    vue3 deep dive vue core vnode vue core render / mount / patch refs https://www.vuemastery.com/course ...