如何用递归解决斐波那契数列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用递归解决斐波那契数列相关的知识,希望对你有一定的参考价值。

参考技术A 斐波那契数列定义 f(1)=1, f(2)=1, f(n)=f(n-1)+f(n-2)用递归的方法解决是最快的(对设计者而言)int fipo(int n)
if (n==1) return 1;
else if (n==2) return 1;
else
return fipo(n-1)+fipo(n-2);


函数fipo 会一直不断地调用自己,直到 n=3时, 才能计算出 f(3)=f(2)+f(1)=2. 然后在一步一步退回展开 f(4)=f(3)+f(2)=2+1=3, f(5)=f(4)+f(3)=3+2=5,... 一直返回到第一次调用自己(递归)的地方,这样算出f(n)的值

如何用java语言输出斐波那契数列

    Java编程:三种方法实现斐波那契数列


其一方法:

public class Demo2   
    // 定义三个变量方法  
    public static void main(String[] args)   
        int a = 1, b = 1, c = 0;  
        System.out.println("斐波那契数列前20项为:");  
        System.out.print(a + "\\t" + b + "\\t");  
        //因为前面还有两个1、1 所以i<=18  
        for (int i = 1; i <= 18; i++)   
            c = a + b;  
            a = b;  
            b = c;  
            System.out.print(c + "\\t");  
            if ((i + 2) % 5 == 0)  
                System.out.println();  
          
      
  

    java编程:三种方法实现斐波那契数列


其二方法:

public class Demo3   
    // 定义数组方法  
    public static void main(String[] args)   
        int arr[] = new int[20];  
        arr[0] = arr[1] = 1;  
        for (int i = 2; i < arr.length; i++)   
            arr[i] = arr[i - 1] + arr[i - 2];  
          
        System.out.println("斐波那契数列的前20项如下所示:");  
        for (int i = 0; i < arr.length; i++)   
            if (i % 5 == 0)  
                System.out.println();  
            System.out.print(arr[i] + "\\t");  
          
      
  

    Java编程:三种方法实现斐波那契数列

其三方法:

public class Demo4   
    // 使用递归方法  
    private static int getFibo(int i)   
        if (i == 1 || i == 2)  
            return 1;  
        else  
            return getFibo(i - 1) + getFibo(i - 2);  
      
  
    public static void main(String[] args)   
        System.out.println("斐波那契数列的前20项为:");  
        for (int j = 1; j <= 20; j++)   
            System.out.print(getFibo(j) + "\\t");  
            if (j % 5 == 0)  
                System.out.println();  
          
      
  

同一道题用各种不同的思路去思考解决,也是对知识综合运用的锻炼。

参考技术A /**
 * Created by admin on 2017/6/21.
 */
public class Fibonacci 
    /**
     * 输出指定个数的斐波那契数列
     *
     * @param n
     */
    public static void printFibonacci(int n) 
        int[] init = 1, 1;
        int last2 = 1;
        int last = 1;
        for (int i = 0; i < n; i++) 
            if (i < init.length) 
                System.out.print(" " + init[i]);
             else 
                System.out.print(" " + (last2 + last));
                int tmp = last;
                last = last2 + last;
                last2 = tmp;
            
        
        System.out.println();
    

    public static void main(String args[]) 
        printFibonacci(3);
        printFibonacci(7);
        printFibonacci(15);

    

参考技术B import java.math.BigInteger; //导入BigInteger数组
import java.util.Scanner; //导入 java.util 包下的 Scanner 类
public class Fibonacci //创建一个Fibonacci 类
public static void main(String[] args) //主方法
System.out.println("Please input numbers of fibonacci sequence:"); //打印输出信息,换行
Scanner scan = new Scanner(System.in); //对输入流进行封装
//使用Scanner类创建一个对象scan,调用下列方法,读取用户在命令行输入的数据类型
try //可能产生异常的代码段
int num=scan.nextInt(); //接收一个从控制台输入的整数
BigInteger firstNum = BigInteger.ONE;
BigInteger secondNum = BigInteger.ONE;
BigInteger result = BigInteger.ZERO;
for (int i = 0; i < num; i++)
if (i == 0 || i == 1)
result = BigInteger.ONE;
else
result = secondNum.add(firstNum); //secondNum和firstNum做加法运算
firstNum = secondNum;
secondNum = result;

System.out.print(result + " ");

catch (Exception e) //捕获的异常类型
System.out.println("Please input valid number!");


参考技术C import java.util.Scanner;

public class Fibonacci 
public static void main(String[] args) 
Scanner sc = new Scanner(System.in);
System.out.println("请输入要打印前多少项的斐波那契数列");
int n = sc.nextInt();
printFibonacci(n);


static void printFibonacci(int n)
int firstNum = 1;
int secNum = 1;
if(n>=1)
System.out.print(firstNum+" ");

if(n>=2)
System.out.print(secNum+" ");

for(int i=3;i<=n;i++)
int temp = firstNum+secNum;
System.out.print(temp+" ");
firstNum = secNum;
secNum = temp;


直接给你参考代码吧,有问题请追问

参考技术D

具体代码如下:

public class Test

public int fib(int n)

if(n==1 || n==2)//当n=1或2时 返回1

return 1;

return fib(n-1)+fib(n-2);//返回前两项的和

public static void main(String[] args)

Test t = new Test();

for (int i = 1; i <= 15; i++)

System.out.printf ("fib(%d)=%d\\n",i,t.fib(i));

运行结果:

fib(1)=1

fib(2)=1

fib(3)=2

fib(4)=3

fib(5)=5

fib(6)=8

fib(7)=13

fib(8)=21

fib(9)=34

fib(10)=55

fib(11)=89

fib(12)=144

fib(13)=233

fib(14)=377

fib(15)=610

以上是关于如何用递归解决斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章

递归优化的斐波那契数列

如何用C语言输出斐波那契数列的前n项

08《算法入门教程》递归算法之斐波那契数列

递归求斐波那契数列

编写一个C程序,用于打印斐波那契数列的前10个数

九度oj 题目1075:斐波那契数列