Java面试题:小白不得不懂的斐波那契数列
很长一段时间里,我都非常疑惑:“我写的技术文章不差啊,有内容的同时还很有趣,不至于每篇只有区区几十个人读啊?为什么有些内容简单到只有一行注册码的文章浏览量反而轻松破万?”这样的疑惑如鲠在喉啊!写技术博客做分享的人,有几个真心实意的说只写给自己看的?这无非是写出来后没人看的自我安慰(不好意思,我就属于这种人,/(ㄒoㄒ)/~~)。
但就在昨天晚上,我终于恍然大悟;技术交流群里有一个叫涛涛的小伙伴用几句通俗易懂的道理就点醒了我:“高深的文章,看懂的人少,适合高层;像只有注册码的文章,反而是大众所需,浏览量非常高,因为只要是初学编程的,几乎都用得着! 就像买房子一样,普通商品房买的人最多,复式套房要少一些,别墅就更少了——而你这样的‘专家’写出来的文章就相当于在卖别墅。”
哦,有一种醍醐灌顶的感觉,有没有?假如把编程也看做是金字塔的话,那咱真心实意的说,咱的水平顶多也就处在中层偏下的水平,强装专家写出来的文章注定会“高不成低不就”——造成这种局面真的非常尴尬,在乎高品质文章的读者就会吐槽:“这货就是一个逗比”,然后笑一笑走了;不在乎高品质想找干货的读者也会不满意:“这货写出来的文章有点‘高深’,我都看不懂啊”,然后呵呵一声也走了。想一想,真是尴尬极了!
像我这种写不出来高端文章,又想要点浏览量来安慰自己的写作者,怎么办呢?
还是写一些有趣的、入门级的干货内容吧!比如说今天这篇《Java面试题:小白不得不懂的斐波那契数列》。
Java中涉及控制执行流程的关键字有if-else、while-do-while、for、switch、return、break、continue等等;我们来挑几个来说道说道。
1、要么生,要么死
在网络上看到这么一句话:“人生不过三条路,要么生,要么死,要么生不如死”,经典啊!这句话套用在if-else语句上也非常的贴切,不信你看:
只有一个if语句
if (布尔表达式) {// 语句}
或者一个if语句加上一个else语句
if (布尔表达式) {// 语句} else {// 语句}
或者一个if语句加上一个else if语句,再加一个else语句
if (布尔表达式) {// 语句} else if (布尔表达式) {// 语句} else {// 语句}
2、想清楚再走,还是先走一步再说
while和do-while语句常用来控制不确定次数的循环语句,除了形式上稍显不同之外,do-while会比while多执行一次(同等条件下哦);其格式如下:
while
while(布尔表达式) {// 语句}
do-while
do {// 语句} while(布尔表达式)
3、次数确定请用for
for循环有两种形式,分别如下:
①、创建int变量的形式(可以主动指定循环次数,比如说可以把i < strs.length()改为i < 3,这样就只循环3次而不是4次)
String [] strs = {"沉", "默", "王", "二"};for(int i = 0; i < strs.length(); i++) { String str = strs[i];}
稍微解释一下:第一次循环之前要进行变量初始化int i = 0,随后进行条件测试i < strs.length(),然后执行语句String str = strs[i];,语句结束后进行“步进”i++。
②、俗称“foreach”的形式(不必指定下标就能取出元素)
String [] strs = {"沉", "默", "王", "二"};for (String str : strs) {}
也稍微解释一下:冒号:之前声明了String类型的变量str;冒号:之后是数组strs;在执行循环的时候,Java内部会依次取出数组strs中的每一个元素,然后赋值给变量str,直到最后一个元素。
4、可以switch字符串了
当if-else的条件超出三个以上时(看起来有点臃肿),可使用switch语句来进行替代。switch语句的形式如下:
switch(condition) { case calue1 : // 语句 break; case calue2 : // 语句 break; case calue3 : // 语句 break; default : // 语句}
使用switch语句时需要特别注意的就是break关键字,该用的地方一定不要忘记! 否则,switch语句就会触发下一个case分支,而忽略掉没有break关键字的当前分支。
从Java SE 7 开始,switch语句支持字符串形式的条件了;在这之前,switch只支持类型为char、byte、short或int的常量表达式,以及枚举常量。
5、斐波那契数列
斐波那契数列几乎是每一个学习编程的人都绕不开的一道笔试题;斐波那契数列是“斐波那契”(伟大的数学家)在养兔子时候发现的非常有意思的数列:
第一个月小兔子没有繁殖能力,所以还是一对;
两个月后,生下一对小兔总数共有两对;
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;
……依次类推可以列出下表:
在这里插入图片描述
人们发现自然规律的能力好强,有没有?怎么使用Java实现斐波那契数列呢?
规律:第一个数+第二个数=第三个数,第二个数+第三个数=第四个数,第三个数+第四个数=第五个数,以此类推
具体代码:
package com.cmower.java_demo;
public class Fibonacci {
public static void main(String[] args) { int start = 1; int next = 1; System.out.print(start + "、" + next + "、");
// 从3开始到第num个斐波那契数 for (int i = 3; i <= 12; i++) { int last = start + next; System.out.print(last + "、");
start = next; next = last; } System.out.println();
// 通过迭代计算,效率很低 for (int i = 1; i <= 12; i++) { System.out.print(getFibonacci(i) + "、"); } }
private static int getFibonacci(int index) { if (index == 1 || index == 2) { return 1; }
return getFibonacci(index - 1) + getFibonacci(index - 2);
}
}
思路1:先指定前两个数,然后在for循环中计算接下来的数,然后用后一个数替换前一个。
思路2:通过迭代完成,下标是1或者2的时候返回1,其余的数等于前一个数和前前一个数的和。
Java面试题:小白不得不懂的斐波那契数列的更多相关文章
- 斐波那契数列-java编程:三种方法实现斐波那契数列
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … 这个数列 ...
- Java算法求最大最小值,倒序,冒泡排序,斐波纳契数列,日历一些经典算法
一,求最大,最小值 int[] a={21,31,4,2,766,345,2,34}; //这里防止数组中有负数,所以初始化的时候给的数组中的第一个数. int max=a[0]; int min=a ...
- java中的不死兔问题(斐波那契数列)(递归思想)
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public class Item { public static ...
- Java迭代实现斐波那契数列
剑指offer第九题Java实现 题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. public class Test9 { public static void ...
- 【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现
最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考 话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的, ...
- 剑指offer编程题Java实现——面试题9斐波那契数列
题目:写一个函数,输入n,求斐波那契数列的第n项. package Solution; /** * 剑指offer面试题9:斐波那契数列 * 题目:写一个函数,输入n,求斐波那契数列的第n项. * 0 ...
- 《剑指offer》面试题9 斐波那契数列 Java版
书中方法一:递归,这种方法效率不高,因为可能会有很多重复计算. public long calculate(int n){ if(n<=0){ return 0; } if(n == 1){ r ...
- 剑指offer第二版面试题10:斐波那契数列(JAVA版)
题目:写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下: 1.效率很低效的解法,挑剔的面试官不会喜欢 使用递归实现: public class Fibonacci { public ...
- java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)
为什么说 “算法是程序的灵魂这句话一点也不为过”,递归计算斐波那契数列的第50项是多少? 方案一:只是单纯的使用递归,递归的那个方法被执行了250多亿次,耗时1分钟还要多. 方案二:用一个map去存储 ...
随机推荐
- django-celery配置
1.项目启动顺序: 启动项目: python manage.py runserver 启动celery beat python manage.py celery beat 启动celery worke ...
- python基础知识练习题(二)
1. 有两个列表 l1 = [11, 22, 33] l2 = [22, 33, 44] a.获取内容相同的元素列表 li = []l1 = [11, 22, 33] l2 = [22, 33, 44 ...
- Windows linux子系统 使用说明
1.安装 linux 子系统 2.应用商店安装ubuntu 3.为了方便可以配置成默认登陆root账户 Ubuntu config –default-user root 4. 安装完毕 5.安 ...
- html2canvas在Vue项目踩坑-生成图片偏移不完整
背景 最近做一个Vue项目需求是用户长按保存图片,页面的数据是根据不同id动态生成的,页面渲染完生成内容图片让用户长按保存的时候,把整个页面都保存起来. 在项目遇到的坑是图片能生成,可是生成的图片总是 ...
- vue 源码学习(一) 目录结构和构建过程简介
Flow vue框架使用了Flow作为类型检查,来保证项目的可读性和维护性.vue.js的主目录下有Flow的配置.flowconfig文件,还有flow目录,指定了各种自定义类型. 在学习源码前可以 ...
- B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google’s Sofware-Defined WAN
B4及之后:为谷歌软件定义WAN的可用性和扩展管理层次化.划分和不对称 本文为SIGCOMM 2018会议论文,由谷歌提供. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎 ...
- 长沙学院APP之校园模块设计
一.简单回顾 在上次的scrum冲刺中,我将整个长沙学院的APP做了一个基本的架构设计以及框架设计,确定好了APP的功能结构以及实现时所要达到的效果,并且做了一个简单的用户登录界面,由于所学知识有限, ...
- QEMU KVM Libvirt手册(9): network
虚拟网卡由-net nic定义 # qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntutest.img -vnc ...
- MySQL 千万级 数据库或大表优化
首先考虑如下因素: 1.数据的容量:1-3年内会大概多少条数据,每条数据大概多少字节: 2.数据项:是否有大字段,那些字段的值是否经常被更新: 3.数据查询SQL条件:哪些数据项的列名称经常出现在WH ...
- S-CMS企建v3二次SQL注入
S-CMS企建v3二次SQL注入 0x01 前言 继上一篇的S-CMS漏洞再来一波!首发T00ls 0x2 目录 Sql注入二次SQL注入 0x03 Sql注入 漏洞文件:\scms\bbs\bbs. ...