zoukankan      html  css  js  c++  java
  • 斐波那契数列解题思路

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

  • 相关阅读:
    (转)Ogre终于开始改进其对地形渲染的支持
    (转)让VS2005编辑器支持着色器语法高亮
    (转)天龙粒子系统改进
    (转)【行业专题】计算机世界《狗日的腾讯》报道
    (转)Ogre天龙八部2及鹿鼎记天空顶(Skydome)镜头眩光(Lens Flare)等效果的实现
    (转)“你的代码写的很烂”
    程序员能力矩阵
    Oracle操作表空间
    TCP/IP、HTTP、WEBSERVICE、SOAP、ICE都使用后才有感慨
    oracleserviceSID 在系统服务里丢失
  • 原文地址:https://www.cnblogs.com/coding365/p/12872444.html
Copyright © 2011-2022 走看看