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;
}
}