递归
递归是一种常见的解决问题的方法,即把问题逐渐简单化,递归的基本思想是“自己调用自己”。
递归的结构包括两部分:
1、 递归头:解答什么时候不调用自身方法。如果没有递归头,将陷入死循环,也就是递归的结束条件。
2、 递归体:什么时候需要调用自身方法。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。
这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
(3)数据的结构形式是按递归定义的。
如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。
递归的缺点:
递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。
1 /** 2 * result 3 * 用递归求n的阶乘 4 * Fibonacci 5 * 用递归求第n位斐波那契数 6 * @author huang 7 * 8 */ 9 10 public class digui { 11 12 //用递归求n的阶乘 13 public static long result(int n) { 14 if(n==1){ 15 return 1; 16 }else { 17 return result(n-1)*n; 18 } 19 } 20 21 //用递归求斐波那契数列 22 public static int Fibonacci(int m) { 23 if(m<=0){ 24 return 0; 25 } 26 if(m==1 ||m==2){ 27 return 1; 28 } 29 else { 30 return Fibonacci(m-1)+Fibonacci(m-2); 31 } 32 } 33 34 public static void main(String[] args) { 35 Scanner scanner = new Scanner(System.in); 36 System.out.println("请输入阶乘数n:"); 37 int n = scanner.nextInt(); 38 long d1 = System.currentTimeMillis(); 39 result(n); 40 long d2 = System.currentTimeMillis(); 41 System.out.println(n+"的阶乘结果为:"+result(n)); 42 System.out.println("阶乘耗时为:"+(d2-d1)); 43 44 System.out.println("#########"); 45 46 System.out.println("请输入要计算的斐波那契数位n:"); 47 int m = scanner.nextInt(); 48 long d3 = System.currentTimeMillis(); 49 Fibonacci(m); 50 long d4 = System.currentTimeMillis(); 51 System.out.println("斐波那契数为:"+Fibonacci(m)); 52 System.out.println("耗时为:"+(d4-d3)); 53 } 54 55 }
浙公网安备 33010602011771号