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

2014-09-01 开源中国
/**
*
 * @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
*/

/**
 * 总结:
 * 使用非递归的方式更简洁,更易懂,运行效率更高,为什么还要用递归的算法呢。
 * 递归使规模逐渐降低的方式解决问题,以这种统一的方式解决足够复杂的问题。
*/

 

 

 

 

 

 


用户评论
开源开发学习小组列表