您的位置:首页 > 其它

递归:阶乘以及菲波那切数列的程序实现

2015-08-08 14:53 393 查看
    分治法:把一个难以直接解决的大问题分割成一些规模较小的相同问题,以便各个击破,分而治之。

    分治法中的子问题和原问题的类型一致,子问题不断缩小直至变成可以求解的简单问题,从而就引入了递归算法。     

    直接或间接调用自身的算法称为递归算法。

例子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);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息