• 斐波那契数列解题思路


    	## 斐波那契数列
    	
    	斐波那契数列,作为著名的数列,有很多种解题方法,在这里我提供三种。一个是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

  • 相关阅读:
    《文献管理与信息分析》速看提问
    《构建之法(第三版)》速读提问
    《深入理解计算机系统》速读提问
    2017-2018-1 20179205《Linux内核原理与设计》第八周作业
    《从问题到程序》第一、二章学习
    2017-2018-1 20179205 第三周测试 汇编混合编程
    2017-2018-1 20179205《Linux内核原理与设计》第七周作业
    第三周main参数传递-1 课堂测试
    2017-2018-1 20179205《Linux内核原理与设计》第六周作业
    2017-2018-1 20179203 《Linux内核原理与分析》第八周作业
  • 原文地址:https://www.cnblogs.com/coding365/p/12872444.html
Copyright © 2020-2023  润新知