斐波那契额数列(剑指offer第七题)

本文介绍四种高效计算斐波那契数列的方法,包括递归、动态规划及迭代等,旨在优化计算效率并降低时间与空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39

二、解题思路

  (1)递归思路:先初始化出前连个数字,再递归求第n个数

 (2)动态规划:用备忘录记下来放到数组中,可以降低时间复杂度,又分为两种:自顶向下和自底向上。

 (3)用迭代法:用循环求出第n个数

三、可运行java代码

package 剑指offer;

import java.io.File;

/**
 * @description: 求斐波那契额数列第n项 
 */

/*
 * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
         n<=39
 */
public class Solution_7 {
	 
	   //方法一:常规方法,用递归求解   复杂度为:2的n次方
	   public int Fibonacci(int n) {
	       if(n==0){  
	    	   return 0;
	       }
	       if(n==1){
	    	   return 1;
	       }
	       return  Fibonacci(n-1)+Fibonacci(n-2);
	    }
	   
	   //方法二:用动态规划,自底向上,复杂度从指数级降为多项式级   时间复杂度为:n 空间复杂度为:n
	   int fib[] = new int[39];
	   public int Fibonacci_1(int n) {
	       if(n==0) return 0;
	       if(n==1) return 1;
	       fib[0]=1;
	       fib[1]=1;
	       for(int i=2;i<n;i++){
	    	   fib[i]=fib[i-1]+fib[i-2];
	       }
		   return fib[n-1];
	    }
	   
	   //方法三:用动态规划,自顶向下,复杂度从指数级降为多项式级  时间复杂度为:n 空间复杂度为:n
	   int fib1[] = new int[39];
	   public int Fibonacci_2(int n){
		   if(n==1) return 1;
		   if(n==2) return 1;
		   if(fib[n]!=0) return fib[n];
		   return Fibonacci(n-1)+Fibonacci(n-2); 
	   }
	   
	   //方法四:进一步改进   时间复杂度为:n 空间复杂度为:1
	  public int Fibonacci_3(int n){
		  int a=0,b=1,sum=0,i;
		  if(n==1||n==2){
			  return 1;
		  }
		   for(i=1;i<n;i++){
			   sum = a+b;
			   a=b;
			   b=sum;
		   }
		   return sum;
	  }
	   
	   public static void main(String[] args) {
		   
		   Solution_7 s = new Solution_7();
		System.out.println(s.Fibonacci_3(1));
	    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值