目录
3、 按顺序打印一个数字的每一位(例如:1234 打印出1 2 3 4)
4.递归输入一个非负整数,返回组成的数字之和(如 123返回1+2+3,和是6)
一.递归的概念
一个方法在执行过程中调用本身,就称为“递归”。
我的理解就是一个很大问题一直都是在重复子问题,只要将子问题解决,然后一层一层套回去,就能解决大的原问题。
二.递归的使用场景
1.一个大问题可以拆分成小的子问题。
2.子问题与原问题有有相同的解决思路。
3.存在递归终止条件(也就是递归出口)。
三.递归例题
1.递归求N的阶乘
先上分析图
代码实现:
public class RecFactorial {
public static void main(String[] args) {
// 递归求3的阶乘
int n = 3;
int ret = retNum(n);
System.out.println(ret);
}
public static int retNum(int n) {
if (n == 1) {
return 1; //递归终止条件
}
return n*retNum(n-1);
}
}
2、递归求5!+4!+3!+2!+1!
public class RecSubFac {
public static void main(String[] args) {
// 递归求5!+4!+3!+2!+1!
int sum = 0;
for (int i = 5; i >= 1; i--) {
int n = i;
sum += retNum(n);
}
System.out.println(sum);
}
public static int retNum(int n){
if (n == 1) {
return 1;
}
return n * retNum(n - 1);
}
}
3、 按顺序打印一个数字的每一位(例如:1234 打印出1 2 3 4)
import java.util.Scanner;
public class RecPrintNum {
public static void main(String[] args) {
// 按顺序打印一个数字的每一位(例如:1234 打印出1 2 3 4)
// 思想:递归除,求余 1234先递下去 (倒序4 3 2 1),再归回来打印输出
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个数");
int n = scan.nextInt();
//System.out.println( );
ret(n);
}
public static void ret(int n) {
if (n > 9) {
ret(n / 10); //123 12 1
}
System.out.println(n % 10);
}
}
4.递归输入一个非负整数,返回组成的数字之和(如 123返回1+2+3,和是6)
public class RecSubNum {
public static void main(String[] args) {
int num = 123;
System.out.println(retnum(num));
}
public static int retnum(int n){
if(n<10){
return n;
}
return n % 10 + retnum(n/10);
}
}