递归算法--斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
很容易我们想到使用递归求解:
public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;if(n == 1)return 1;return Fibonacci(n-2) + Fibonacci(n-1);}
}
当n比较大时,可以明显感觉算法运行速度比较慢,这是由于上述返回代码中使用了两层递归,使用递归的思想是好的,但是这里我们可以用迭代明显改善算法运行效率,用空间换时间:
public class Solution {public int Fibonacci(int n) {if(n < 2)return n;int f = 0, g = 1;int result = 0;for(int i = 1; i < n; i++){result = f + g;f = g;g = result;}return result;}
}
问题变形
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
分析
对于n步操作,可以分两种情况讨论:
1. 第一步这样覆盖
那么f(n) = f(n-1);
2. 第一步这么覆盖
那么下一步只有可能这么覆盖
那么f(n) = f(n-2)
所以f(n) = f(n-1) + f(n-2)
public class Solution {public int RectCover(int target) {if(target <= 1){return 1;}if(target*2 == 2){return 1;}else if(target*2 == 4){return 2;}else{return RectCover((target-1))+RectCover(target-2);}}
}
递归算法--斐波那契数列相关推荐
- python递归算法——斐波那契数列
文章目录 一,递归方法: 二,斐波那契数列简介: 特性一: 特性二: 两种方法运行时间对比: / 一,递归方法: / 递归方法为:将问题一步步分解,直到得到可以解决的简单问题. 通常涉及直接或间接条用 ...
- python编写递归函数和非递归函数、输出斐波那契数列_python 入门之斐波那契数列递归表达式算法和非递归算法...
题目: 斐波那契数列是一组有规律的数列:1,1,2,3,5,8,13,--..,那么我们怎么用python 来完成此算法,并求出第200位的值是多少 1.python 递归表达式实现: def fib ...
- 递归与分治——斐波那契数列非递归,递归,与优化后的递归算法
斐波那契数列: 1.1.2.3.5.8.13.21.-- 简单说,就是前两项的和是第三项的值. 1.求第N个斐波那契数的值(非递归) //斐波那契数列 int fun(int n) {int a = ...
- c++调用cplex求解例子_递归算法的R语言实现 (罗汉塔、九连环、斐波那契数列等问题的求解)...
递归算法用函数来实现,通俗地说就是函数对自身的调用,求解递归问题就转化为函数的调用关系问题.函数f(n)随自变量n的增加而变化,函数的调用关系也就表现为f(n)与f(n-1)或f(n-2)关系的问题. ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
- python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔
一.求一个整数的阶乘: 1.常用的迭代方法写法: def jc(n):result = nfor i in range(1, n):result *= ireturn resultnu = int(i ...
- python递归算法(斐波那契数列,汉诺塔、二分法查找)
# 递归算法的三大特点 # 1.递归过程一般通过函数或子过程来实现 # 2.递归算法在函数或子过程的内部,直接或间接调用自己的算法 # 3.递归算法实际上是把问题转换为规模缩小的同类问题的子问题,然后 ...
- 递归算法——阶乘、斐波那契数列
文章目录 前言 一.什么是递归算法? 二.递归算法特点 三.递归算法的使用要求 四.应用示例--阶乘 1.阶乘概述 2.思路分析 3.代码实现 五.应用示例--斐波那契数列 1.思路分析 2.代码实现 ...
- python递归求斐波那契数列前20项_用递归算法实现斐波那契数列1,1,2,3,5,8,13……的前20项,每输出5项一换行,用C++...
关于 用递归算法实现斐波那契数列1,1,2,3,5,8,13--的前20项,每输出5项一换行,用C++的搜索结果 回答 请参考这篇文章,https://help.aliyun.com/document ...
最新文章
- 异步系统接口调用流程图
- 计算机脚本程序编写,实验三-shell脚本程序设计.docx
- 《Python面向对象编程指南》——2.7 __del__()方法
- STM32分散加载文件
- 如何理解许多Android布局
- 《游戏编程模式》一7.5 状态对象应该放在哪里呢
- Halcon深度学习总结
- 【频率计】基于ISE+VHDL编程的多功能数字频率计
- 你所谓的诗和远方,不过是虚荣感作祟
- 房地产项目开发流程参考
- 普通路由器改4g路由器_工业远程管理神器,4G无线路由器更方便
- win10图片打不开,显示系统文件错误(-2147219196)
- Android客户端连接服务器- OKHttp的简单实用方法
- Windows 查看端口是否已打开
- mysql数据库编程题题_mysql数据库编程题测试
- Java解压缩技术(三)BZIP2压缩-解压缩
- 影响你生活的14个心理效应
- python 热图颜色_Python可视化matplotlibseborn14-热图heatmap
- BUPT数电爱课堂概念题_易错点_错题 汇总
- htonl, ntohl两种实现