本帖最后由 瓶中人 于 2013-10-30 20:04 编辑
前天听付东老师讲课时,他用那个递归法创建文件夹时,出现问题。想想看其实递归法要一层层递归,是挺麻烦的,之前看到过一个斐波契数列。在这里说说
什么是斐波契数列吧
1,1,2 , 3 , 5,8,13,21,。。。。。
斐波契数列是从第3个数起每个数是前二个数的和。
以前也只知道一种方法解这个数列
就是用递归法
import java.util.Scanner;
public class Fibonacci
{
public static void main(String[] args)
{
manager();
}
public static void manager(){
Scanner input = new Scanner(System.in);
System.out.print("请输入要输出的斐波那契数列的长度:");
int num = input.nextInt();
System.out.println("输出数列:");
for ( int i = 0 ; i < num ; i ++ )
{
System.out.print(getFib(i) + "\t");
}
}
public static int getFib(int n){ //递归法计算斐波那契数列
if (n < 2)
{
return 1;
}
else{
return getFib(n - 1) + getFib(n -2); // 一直递归至n < 2为止
}
}
}
但是因为知道递归数并不是那么好用,于是想了个方法看看效果如何!代码如下
import java.util.Scanner;
public class FibonacciDemo
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("请要输出斐波那契数列的的长度:");
int num = input.nextInt();
System.out.print("输出长度为" + num + "的斐波那契数列:");
for ( int i = 0 ; i < num ; i ++ ) //循环输出斐波那契数列
{
System.out.print(getFib(i) + " "); //调用方法
}
}
public static int getFib(int num){
if (num < 2) //当输入少于2的数时返回1
{
return 1 ;
}else{
int a = 1 ; //a、b为第一个和第二个数的值
int b = 1 ; //当num==2时进不了循环,所以当num==2时直接输出b + a
for (int i = 2 ; i < num ; i ++)
{
b = a + b ; //因为n == 2 时进不了循环所以此时的b 为 n ==2的数值
a = b -a; //而a则为 n== 1 的数值,则如此循环下去即达到斐波那契数列的要求,一个数是前两个数的和
}
return a + b;
}
}
}
各位看看是否如此!
|