递归 (消耗性能,能不用就不用,除非基数较小)
- A方法调用B方法,我们很容易理解!
- 递归就是:A方法调用A方法!就是自己调用自己
- 利用递归可以简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出题过程所需要的多次重复计算,大大地减少程序的代码量。递归的能力在用有限的语句来定义对象的无限集合。
- 递归结果包括两个部分:
- **递归头:**什么时候不调用自身方法。如果没有头,将陷入死循环。
- **递归体:**什么时候需要调用自身方法。
例子1 (死循环)
package com.zhong.method;
public class Demo05{
public static void main(String [] args){
Demo05 student = new Demo05; //student代表Demo05里面的类
student.test(); //test是student里的一个方法
}
public void test(){
test();//没有递归头
}
}
Scanner scanner = new Scanner(System.in);
System.out.println("hello,world!");
scanner.close();
}
}
例子2(求阶层)
边界条件:边界 本例子调用到f(1),结束
前阶段:
返回阶段 n*(n-1)
package com.zhong.method;
public class Demo06{
//5! 5*4*3*2*1
public static void main(String [] args){
}
//输入 n=1的时候 f(1)输出过程及结果 1
//输入 n=2的时候 f(2)输出过程及结果 2*f(1) 2
//输入 n=3的时候 f(3)输出过程及结果 3*f(2)
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n:n-1);
}
}
作业
package com.zhong.method;
public class Demo06{
//5! 5*4*3*2*1
public static void main(String [] args){
}
//输入 n=1的时候 f(1)输出过程及结果 1
//输入 n=2的时候 f(2)输出过程及结果 2*f(1) 2
//输入 n=3的时候 f(3)输出过程及结果 3*f(2)
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n:n-1);
}
}