JAVA每日随手练【方法的递归】
1.青蛙跳台阶问题
功能:一只青蛙跳台阶,一次可以跳1阶,可以2阶。那么,台阶为n时,有多少种跳法。
分析:一只青蛙一次可以跳上1级台阶,也可以跳上2级。
求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
如果n=1,只有一种跳法,那就是1
如果n=2,那么有两种跳法,2,[1,1]
如果n=3,那么有三种跳法,[1,1,1],[1,2],[2,1]
如果n=4,那么有五种跳法,[1,1,1,1],[1,1,2],[1,2,1],[2,1,1],[2,2]
如果n=5,那么有八种跳法,[1,1,1,1,1],[1,1,1,2],[1,1,2,1],[1,2,1,1],[2,1,1,1],[2,2,1],[2,1,2],[1,2,2]
结果为1,2,3,5,8(斐波那契数列)
代码:
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入青蛙所需要跳的阶数为:");
int m = sc.nextInt();
System.out.println("青蛙跳"+m+"阶的跳法为"+fib(m)+"种");
sc.close();
}
private static int fib(int a) {
if (a == 1) {
return 1;
} else if (a == 2) {
return 2;
}else {
return fib(a - 1) + fib(a - 2);
}
}
}
运行结果:
2.返回的数字之和
功能:写一个递归方法,输入一个非负整数,返回组成它的数字之和
例如,输入1729,则应该返回1+7+2+9==19
代码:
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个非负整数:");
int m = sc.nextInt();
System.out.println("返回值为:"+sum(m));
sc.close();
}
public static int sum(int n){
if (n<10){
return n;
}
return n%10 +sum(n/10); //1792==递归179+2==(递归17+9)+2==(递归1+7)+9+2==1+7+9+2
}
}
运行结果:
3.递归求 N 的阶乘
功能:递归求 N 的阶乘
import java.util.Scanner;
public class test3{
public static void main(String[] args) {
System.out.print("输入所求数字:");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
System.out.println(m+"的阶乘为:"+fac(m));
sc.close();
}
public static int fac(int n){
System.out.println("函数开始,n=:"+n);
if (n==1){
System.out.println("函数结束,n=1,返回值=1");
return 1;
}
int ret = n*fac(n-1);
System.out.println("函数结束,n=:"+n+"返回值="+ret);
return ret;
}
}
运行结果: