递归算法–斐波那契数列「建议收藏」
2023-06-13 09:13:39 时间
大家好,又见面了,我是你们的朋友全栈君。
大家都知道斐波那契数列,现在要求输入一个整数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);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194858.html原文链接:https://javaforall.cn
相关文章
- 机器学习十大经典算法之决策树
- ADRC算法Auto Disturbances Rejection control
- Matlab 非线性有约束规划的粒子群算法「建议收藏」
- #Java算法设计与分析1–递归算法
- 超实用的算法-递归
- 全排列递归算法_全排列递归算法
- Garbled Bloom Filters算法简述
- 高频算法题-两数相加
- Python人工智能:基于sklearn的随机森林分类算法实现方法
- 二叉搜索树算法详解与Java实现编程语言
- Java递归算法详解编程语言
- 算法-复杂链表的复制详解编程语言
- 最长有效括号算法详解编程语言
- C++汉诺塔递归算法完全攻略
- 想了解机器学习?你需要知道的十个基础算法
- 对C语言中递归算法的深入解析
- 快速排序算法原理及java递归实现
- 一组PHP可逆加密解密算法实例代码
- 使用递归算法求第30位数的值
- 二叉树前序遍历的非递归算法
- C#递归实现回文判断算法