斐波那契数列解题思路

	## 斐波那契数列
	
	斐波那契数列,作为著名的数列,有很多种解题方法,在这里我提供三种。一个是c++,两个是java。
	
	1、递推算法
import java.util.Scanner;
 
//用递推算法来实现斐波那契数列
//它的前若干项是:1,1,2,3,5,8,13,21,34…求此数列的第n项。
public class Fibonacci_1 {
    public static void main(String[] args) {
        System.out.println("你想知道Fibonacci数列第几项的值?");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println("数列的第n项的值为:" + f(n));
    }
 
    public static int f(int n){
        int f0 = 1, f1 = 1;
        int f2 = 0;
 
        for(int i = 3; i <= n; i++){
            f2 = f0 + f1;
            f0 = f1;
            f1 = f2;
        }
        return f2;
    }

2、递归算法

import java.util.Scanner;
 
//Fibonacci数列:1,1,2,3,5,8,...
//求该数列第n个数的值。
//数列满足递归公式:F1=1,F2+=1,Fn=Fn-1 + Fn-2
public class Fibonacci {
    public static void main(String[] args){
        System.out.println("你想知道Fibonacci数列第几项的值?");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println("数列的第n项的值为:" + f(n));
    }
 
    public static int f(int n){
        if(n <= 0) {//提高健壮性
            System.out.println("输入的 n 应该大于0");
            return -1;
        }else if(n == 1 || n == 2){
            return 1;
        }else{
            return f(n-1)+f(n-2);
        }
    }
 
//以下方法改编自:https://blog.csdn.net/u010425776/article/details/50830193
 
   //计算斐波那契数列长度,代码应该还有错误,还没解决
//    public static int fibonacci_recursion(int n){
//        if(n<0){
//            System.out.println("n不能小于0");
//            return 0;
//        }
//
//        if(n==0 || n==1)
//            return n;
//
//        //a1用于存储fibonacci(n-2),a2用于存储fibonacci(n-1),a3用于存储fibonacci(n)
//        int a1=0,a2=1,a3=1;
//        for(int i=0;i<n-1;i++){
//            a3 = a1+a2;
//            a1 = a2;
//            a2 = a3;
//        }
//
//        return a3;
//    }
}

3、普通循环算法(最简)

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
	int fnm1 = 1;
	int fnm2 = 1;
	int fn = 0;
	int _n;
	cin >> _n;
	if (_n == 1) {
		cout << "1" << endl; return 0;
	}
	else if (_n == 2) {
		cout << "1" << endl; return 0;
	}
	else
		for (int i = 3; i <= _n; i++)
		{
			fn = fnm1 + fnm2;
			fnm1 = fnm2;
			fnm2 = fn;
		}
	cout << fn << endl;
	return EXIT_SUCCESS;
}

其他参考文章:
https://blog.csdn.net/m0_37292262/article/details/81317911

posted @ 2020-01-12 22:01  Aeterna_Gungnir  阅读(305)  评论(0编辑  收藏  举报