《剑指offer》——斐波那契数列

60 篇文章 3 订阅

更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~

T:

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

constraints:

时间限制:1秒 空间限制:32768K

常用的两种方式,递归非递归

  • 递归:简单的不能再简单了,递归题的开山鼻祖。。。

code:

	package niuke.sward2offer.fibonacci;
	/**
	 * T:斐波那契数列
	 * 
	 * 题目描述
	 * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
	 * 
	 * date: 2015.11.2 19:41
	 * 
	 * @author SSS
	 *
	 */
	public class Solution {
	    //递归形式
	    public int Fibonacci(int n) {
	        if (n == 1 || n == 0) {
	            return n;
	        }
	         
	        return Fibonacci(n - 1) + Fibonacci(n - 2);
	    }
	}

着这题目还算给了点约束条件,用递归的一个必然代价,就是耗空间、耗时间,然后就超时了。。。。

这里写图片描述

  • 非递归:自下而上累加喽

code:

	package niuke.sward2offer.fibonacci;
	/**
	 * T:斐波那契数列
	 * 
	 * 题目描述
	 * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
	 * 
	 * date: 2015.11.2 19:41
	 * 
	 * @author SSS
	 *
	 */
	public class Solution {
		/**
		 * 非递归形式
		 * @param n
		 * @return
		 */
		public int Fibonacci1(int n) {
			int result = 0;
			int preNum = 0;
			int curNum = 1;
			if (n == 0 || n == 1) {
				return n;
			}
			for (int i = 1; i < n; i++) {
				result = curNum + preNum;
				preNum = curNum;
				curNum = result;
			}
			
			return result;
			}
		}

其实,我这个地方定义的三个变量,可以压缩为两个变量,看到讨论版有人这么做:

code:

	class Solution {
	public:
	    int Fibonacci(int n) {
	        int f = 0, g = 1;
	        while(n--) {
	            g += f;
	            f = g - f;
	        }
	        return f;
	    }
	};

虽然只是一个小小的改动,也只是减少了一个变量的存储,但其思想却是十分不同的,这地方也是巧妙利用了数据之间的关系。

更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值