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:

扫描二维码关注公众号,回复: 13069202 查看本文章
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;
	}
}

猜你喜欢

转载自blog.csdn.net/m0_46653702/article/details/109443930