java 参数传值的练习题及答案,练习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 classCircle {doubleradius;public doublefindArea(){double m=Math.PI*radius*radius;returnm;

}//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()方法,调//用完毕后输出当前半径值。程序运行结果如图//所示

importjava.util.Scanner;public classPassObject {public void printAreas(Circle c,inttime ){

Circle c3= newCircle();

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 voidmain(String[] args) {

PassObject p1=newPassObject();

Circle c2=newCircle();

p1.printAreas(c2,5);

}

}

运行结果:

48be7c9304291726268cfe59e8e0e128.png

2.请用Java写出递归求阶乘(n!)的算法 。

代码:

public classrecursionTest1 {public int ff(intn)

{if (n==1)

{return 1;

}else{return n*ff(n-1);

}

}public static voidmain(String[] args) {

recursionTest1 re=newrecursionTest1();int s=re.ff(10);

System.out.println(s);

}

}

运行结果:

bfcddee8bab73c6a3f3d52ad51e4e04b.png

3.已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值。

代码:

public classrecursionTest2 {public int recursion2(intm)

{if (m==0)

{return 1;

}else if (m==1)

{return 4;

}else{return 2*recursion2(m-1)+recursion2(m-2);

}

}public static voidmain(String[] args) {

recursionTest2 re2=newrecursionTest2();int x=re2.recursion2(10);

System.out.println(x);

}

}

运行结果:

520068c557639e517f6a4bb44959ee43.png

4.已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n),

其中n是大于0的整数,求f(10)的值。

代码:

public classrecursionTest3 {public static voidmain(String[] args) {

recursionTest3 re3=newrecursionTest3();

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(intx)

{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);

}

}

}

运行结果:

ccdba223b3b9c49be75c84fba9d79792.png

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");

}

}

}

运行结果:

4a7e8f0d8e78d3fcd14b639cf70ff382.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值