递归:阶乘以及菲波那切数列的程序实现
2015-08-08 14:53
393 查看
分治法:把一个难以直接解决的大问题分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治法中的子问题和原问题的类型一致,子问题不断缩小直至变成可以求解的简单问题,从而就引入了递归算法。
直接或间接调用自身的算法称为递归算法。
例子1:阶乘函数
例子2:Fibonacci
分治法中的子问题和原问题的类型一致,子问题不断缩小直至变成可以求解的简单问题,从而就引入了递归算法。
直接或间接调用自身的算法称为递归算法。
例子1:阶乘函数
import java.util.Scanner; /*阶乘函数 * 递归定义:n!={1 n=0 * {n(n-1)! n>0 */ public class JieCheng { static int result = 0; //阶乘结果 int jiecheng(int n1) { if (n1 == 0) { //n=0 result = 1; } if (n1 > 0) { //n>0 result = n1 * jiecheng(n1 - 1); //递归调用 } return result; } public static void main(String[] args) { for (int i = 0; i < 100; i++) { //做一个循环可以连续输入阶乘的数值 Scanner in = new Scanner(System.in); System.out.println("-----输入阶乘的数值(n>=0)-----"); int n = in.nextInt(); JieCheng jc = new JieCheng(); jc.jiecheng(n); System.out.println(result); } } }
例子2:Fibonacci
import java.util.Scanner; public class Fibonacci { /** * 菲波那切数列: * 无穷数列:1,1,2,3,5,8...... * 递归定义:F(n)= 1...n=0 * 1...n=1 * F(n-1)+F(n-2)...n>1 */ static int result = 0; //结果 int fibonacci(int n) { if (n<=1) { //n<=1 result = 1; } if (n > 1) { //n>0 result = fibonacci(n-1)+fibonacci(n-2); //递归调用 } return result; } public static void main(String[] args) { for (int i = 0; i < 100; i++) { //为了连续输入 Scanner in = new Scanner(System.in); System.out.println("-----输入想要的到的第n位菲波那切数列的数值(n>=1)-----"); int n = in.nextInt(); Fibonacci f = new Fibonacci(); f.fibonacci(n-1); //前面的位数是从0计起的,为了符合常识,这里n要减去1 System.out.println(result); } } }