定义
一个函数自己调用自己
递归的条件
必须要有明确的终止条件
所处理的数据规模在减少
这个转化是可解的
应用
1.求阶乘
/**
* 递归求阶乘
* Created on 2018年9月10日<br>
*/
public class Factorial {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
Long nu = scanner.nextLong();
Long result = func(nu);
System.out.println("阶乘是:"+result);
}
static Long func(Long nu) {
if (1 == nu)
return nu;
else
return func(nu - 1) * nu;
}
}
2 递归实现高斯算法
/**
* 递归求1-100的和
* Created on 2018年9月10日<br>
*/
public class Sum {
public static void main(String[] args) {
Long n =(long) 1000;
System.out.println(func(n));
}
static Long func(Long n ){
if (1==n)
return (long) 1;
else
return func(n-1)+n;
}
}
3 .汉诺塔
public class Hanoitower {
public static void main(String[] args) {
String A = "A";
String B = "B";
String C = "C";
func(3, A,B,C);
}
/**
* @param n 圆盘个数
* @param A 初始石棒
* @param B 中间石棒
* @param C 目标石棒
*/
static void func(int n,String A,String B,String C){
if (1==n)
//如果只有一个盘子,直接把A移到C
System.out.println("把第"+n+"个盘子由"+A+"-"+C);
else{
//先借助C把n-1个元素放在B,然后把第n个元素放到C
func(n-1, A, C, B);
System.out.println("把第"+n+"个盘子由"+A+"-"+C);
//B再借助A把n-1个元素放到C
func(n-1, B, A,C );
}
}
}