Java练习题12.1

Java练习题12.1

分别采取递归和循环两种方法编程:

1.输入一个整数n,求n!

方法1:

package com.shangjiti.aoian;
import java.util.Scanner;
public class No1 {
	public static void main(String[] args) {
		System.out.println("请输入一个整数:");
		Scanner sc=new Scanner(System.in);
		int sum=1;
		int n=sc.nextInt();
		for(int i=1;i<=n;i++)
			sum*=i;
		System.out.println(sum);
	}
}

方法2:

package com.shangjiti.aoian;/*输入一个整数n,求n!*/
import java.util.Scanner;
public class No1_1 {
	public static void main(String[] args) {
		System.out.println("请输入一个整数:");
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		System.out.println(n+"的阶乘是"+jieCheng(n));
	}
	public static int jieCheng(int n) {
		if(n==1) {
			return 1;
		}
		else {
			return n*jieCheng(n-1);
		}
	}
}

2.求Fibonacci数列1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …的第n项

方法1:

package com.shangjiti.aoian;
import java.util.Scanner;
public class No2 {
	public static void main(String[] args) {
		System.out.println("请输入一个整数:");
		Scanner sc=new Scanner(System.in);
		int n=0,n1=1,n2=1;
		int num=sc.nextInt();
		if(num<=2)
			System.out.println("1");
		else 
		{
			for(int i=3;i<=num;i++)
			{
				n=n1+n2;
				n1=n2;
				n2=n;				
			}
			System.out.println(n);
		}
	}
}

方法2:

package com.shangjiti.aoian;
import java.util.Scanner;
public class No2_2 {
	public static void main(String[] args) {
		System.out.println("请输入一个整数:");
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		System.out.print(fib(n));
	}
	public static int fib(int num) {
		if(num==1||num==2)
			return 1;
		else {
			return fib(num-1)+fib(num-2);
		}
	}
}

3.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少

方法1:

package com.shangjiti.aoian;
public class No3 {
	public static void main(String[] args) {
		int day,s=1;
		for(day=9;day>0;day--)
		{
			s=2*(s+1);
		}
		System.out.println("第一天的桃子数是"+s);
	}
}

方法2:

package com.shangjiti.aoian;
public class No3_3 {		//猴子吃桃问题
	public static void main(String[] args) {
		System.out.println("第一天的桃子数是"+peach(1));		
	}
	public static int peach(int day) {
		if(day==10)
			return 1;
		else
			return (peach(day+1)+1)*2;
	}
}

4.5个学生坐在一起,上一个学生比下一个学生分别小2岁,已知第1个学生今年10岁,那么求第5个学生的年龄

方法1:

package com.shangjiti.aoian;
public class No4 {			//求第5个学生的年龄
	public static void main(String[] args) {
		int n=10;
		for(int i=1;i<5;i++)
		{
			n=n+2;
		}
		System.out.println(n);
	}
}

方法2:

package com.shangjiti.aoian;
public class No4_4 {
	public static void main(String[] args) {
		System.out.println(age(5));
}
	public static int age(int n) {
		if(n==1)
		{
			return 10;
		}
		else 
		{
		 return age(n-1)+2;
		}
	}
}

5.利用递归实现1到100以内的求和

方法1:

package com.shangjiti.aoian;
public class No5 {		//1到100以内的求和
	public static void main(String[] args) {
		int sum=0;
		for(int i=1;i<=100;i++)
			sum+=i;
		System.out.println(sum);
	}
}

方法2:

package com.shangjiti.aoian;
public class No5_5 {	//利用递归实现1到100以内的求和
	public static void main(String[] args) {
		System.out.println(sum(100));
	}
	public static int sum(int num){
		if(num == 1)
		{
			return 1;
		}
		else
		{
			return num + sum(num - 1);
		}
	}
}

6.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

方法1:

package com.shangjiti.aoian;
public class No6 {		//小球落地问题
	public static void main(String[] args) {
		int i;
		double h=50,s=100;
		for(i=2;i<=10;i++)
		{
			s=s+2*h;
			h=h/2;
		}
		System.out.println("第十次反弹高度为:"+h);
		System.out.println("第10次落地共经过的米数:"+s);
	}
}

方法2:

package com.shangjiti.aoian;
public class No6_6 {
	public static void main(String[] args) {
		System.out.println("第十次反弹高度为:"+h(10));
		System.out.println("第10次落地共经过的米数:"+s(10));
	}
	public static double h(int n) {
		if(n==1)
			return 50;
		else
			return h(n-1)/2;
	}
	public static double s(int n) {
		if(n==1)
			return 100;
		else
			return s(n-1)+h(n-1)*2;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值