递归算法–斐波那契数列「建议收藏」

递归算法–斐波那契数列「建议收藏」大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39很容易我们想到使用递归求解:publicclassSolution{publicintFibonacci(intn){if(n==0)return0;if(n==1)…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

大家都知道斐波那契数列,现在要求输入一个整数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.net/194858.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Kali如何使用Reaver破解Wi-Fi网络的WPA/WPA2密码

    Kali如何使用Reaver破解Wi-Fi网络的WPA/WPA2密码   首先,我们需要在虚拟机VMware中安装kali系统,关于如何安装kali系统,我的博客里也有介绍;然后要准备一个USB无线网卡,我用的是小米随身wifi。   我们要先了解Reaver的原理:它利用了WiFi保护设置(WiFiProtectedSetup-下文中简称为WPS)的一个弱点,WPS是许多路由器上都有的一个功能,可以为用户提供简单的配置过程,它与设备中硬编…

    2022年6月2日
    133
  • linux(8)Linux 查看端口占用情况「建议收藏」

    linux(8)Linux 查看端口占用情况「建议收藏」前言平常使用linux,我们经常需要查看哪个服务占用了哪个端口,接下来就为大家介绍了2种Linux查看端口占用情况可以使用lsof和netstat命令。1.lsof-i:端口号用

    2022年8月6日
    2
  • hz的单位换算速度_hz与w怎么换算

    hz的单位换算速度_hz与w怎么换算物质在1秒内完成周期性变化的次数叫做频率,常用f表示。物理中频率的单位是赫兹(Hz),简称赫,也常用千赫(kHz)或兆赫(MHz)或GHz做单位,单位符号为Hz。.hz是一个频率的单位,它表示物体在一秒钟之内振动一次,它的频率就是1hz。k代表千,khz即千赫芝;m代表兆,mkhz即兆赫芝;还有一个g代表京,它们都是英美换算单.20kHz等于20000Hz。具体换算过程如下。千赫兹(KHz)和赫兹…

    2022年9月6日
    2
  • JavaEE 从入门到放弃(一):Java EE 是个什么东西「建议收藏」

    从整体上认识JavaEE,看看JavaEE的主要内容。

    2022年4月15日
    80
  • win10台式机一根网线连接笔记本wifi网络

    win10台式机一根网线连接笔记本wifi网络需求:目前情况:win10笔记本电脑有无线网,win10台式机没法连接无线,现在有一条网线。需要达到的效果:通过网线连接笔记本和台式机,笔记本设置共享网络,那么台式机通过网线获取笔记本共享的网络就可以上网了。一、笔记本电脑需要设置【允许其他网络用户通过此计算机的Internet连接来连接】具体操作步骤如下:1、在设置中搜索控制面板,打开即可2、打开【网络和共享中心】3、点击【更改适配器设置】4、选择【WLAN】右键点击【WLAN】——属性5、.

    2022年6月26日
    127
  • Douban的jquery使用技巧

    Douban的jquery使用技巧

    2021年7月26日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号