数据结构与算法(JAVA篇)之递归算法(一)

/** 
 * 
 * @author SunnyMoon 
 */ 
 
 
/** 
 * 概念介绍: 
 * 递归是一种方法(函数)调用自已编程技术。 
 * 递归就是程序设计中的数学归纳法。 
 * 例如:tri(n)=1            if n=1 
 *     tri(n)=n+tri(n-1)    if n>1 
 * 可能while循环方法执行的速度比递归方法快,但是为什么采用递归呢。 
 * 采用递归,是因为它从概念上简化了问题,而不是因为它提高效率。 
 */ 
 
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
 
 
public class Recursion {//求三角数字的递归算法:1,3,6,10,15,21, ......  
 
    static int theNumber;  
 
    public static void main(String[] args) throws IOException {  
        System.out.print("Enter a number: ");  
        theNumber = getInt();  
        //使用递归时调用,默认  
        int theAnswer = triangle(theNumber);  
        //使用非递归时调用  
        //int theAnswer=triangle2(theNumber);  
        System.out.println("Result: " + theAnswer);  
    }  
 
    public static int triangle(int n) {//递归方法,循环调用  
        if (n == 1) {  
            return 1;  
        } else {  
            return (n + triangle(n - 1));  
        }  
    }  
 
    public static int triangle2(int n) {//非递归方法  
        int total = 0;  
        while (n > 0) {  
            total = total + n--;  
        }  
        return total;  
    }  
 
    public static String getString() throws IOException {  
        InputStreamReader isr = new InputStreamReader(System.in);  
        BufferedReader br = new BufferedReader(isr);  
        String s = br.readLine();  
        return s;  
    }  
 
    public static int getInt() throws IOException {  
        String s = getString();  
        return Integer.parseInt(s);  
    }  
}  
 
/** 
 * 运行结果: 
 * Enter a number:  
 * 3 
 * Result: 6 
 */ 
 
/** 
 * 总结: 
 * 使用非递归的方式更简洁,更易懂,运行效率更高,为什么还要用递归的算法呢。 
 * 递归使规模逐渐降低的方式解决问题,以这种统一的方式解决足够复杂的问题。 
 */ 

posted @ 2009-01-20 21:59  小白熊  阅读(399)  评论(0编辑  收藏  举报