斐波那契数列(递归)&求100以内的素数
Java
5
添加了
java.util.Scanner
类,这是一个用于扫描输入文本的新的实用程序。它是以
前的
StringTokenizer
和
Matcher
类之间的某种结合。由于任何数据都必须通过同一模式的
捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从
输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,
Scann输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,
1.斐波那契数列
Java中Scanner类这是一个用于扫描输入文本的
可以使用该类创建一个对象
Scanner reader=new Scanner(System.in);
然后reader调用下面的方法,读取用户在命令行输入的各种类型的数据
package mianshiti;
import java.util.*;
import java.io.*;
public class fibonacci {
public static int k=0;
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);//Scanner类这是一个用于扫描输入文本的
long a=cin.nextLong();//将输入信息的下一个标记扫描为一个long
System.out.println(fibonacci(a));
System.out.println("共调用了"+k+"次");
}
public static long fibonacci(long m){
if(m==0|m==1){
k++;
return m;
}else{
return fibonacci(m-1)+fibonacci(m-2);
}
} }
递归的缺点:
会造成调用栈的溢出,因为需要为每一次函数调用在内存栈中分配空间,而每个进程的栈的容量是有限的。当递归调用层级太多时,就会超出栈的容量,从而导致调用栈溢出。
更简洁的方法:
可以直接从下往上算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3),依次类推可以算出第n项f(n),时间复杂度是O(n)
public class Solution {
public int Fibonacci(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
int numfn1=0;
int numfn2=1;
int currentfn=0;
for(int i=2;i<=n;i++){
currentfn=numfn1+numfn2;
numfn1=numfn2;
numfn2=currentfn;
}
return currentfn;
}
}
跳台阶:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:当前台阶的跳法总数=当前台阶后退一阶的台阶的跳法总数+当前台阶后退二阶的台阶的跳法总数
public class Solution {
public int JumpFloor(int target) {
if(target==2||target==1){
return target;
}
// 第一阶和第二阶考虑过了,初始当前台阶为第三阶,向后迭代
// 思路:当前台阶的跳法总数=当前台阶后退一阶的台阶的跳法总数+当前台阶后退二阶的台阶的跳法总数
int jumpSum=0;//当前台阶的跳法总数
int jumpSumBackStep1=2;//当前台阶后退一阶的台阶的跳法总数
int jumpSumBackStep2=1;//当前台阶后退二阶的台阶的跳法总数
for(int i=3;i<=target;i++){
jumpSum=jumpSumBackStep1+jumpSumBackStep2;
jumpSumBackStep2=jumpSumBackStep1;// 后退一阶在下一次迭代变为后退两阶
jumpSumBackStep1=jumpSum;// 当前台阶在下一次迭代变为后退一阶
}
return jumpSum;
}
}
矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

| √ | |||||||
| √ |
| √ | √ | ||||||
| × | × |
public class Solution {
public int RectCover(int target) {
if (target < 1) {
return 0;
} else if (target == 1 || target == 2) {
return target;
} else {
return RectCover(target-1) + RectCover(target-2);
}
}
}
2.求100以内的素数
素数,是指在大于1的自然数中,除了1和它本身以外,不能被其他数整除的数。
合数,比1大但不是素数的。
1和0既非素数也非合数
如:2,3,5,7....
package mianshiti;
public class primenumber {
public static void main(String[] args) {
int n=0;//用来计算当前是第几个素数
for(int i=2;i<=100;i++){
if(isPrime(i)){
n++;
System.out.print(i+"\t");
if(n%10==0){//每10个数,换一次行
System.out.print("\n");
}
}
}
}
static boolean isPrime(int number){
for(int i=2;i<=Math.sqrt(number);i++){//用一个数除以其他数,只要除到这个数的根号Math.sqrt(number)就可以判断是否素数
if(number%i==0){
return false;
}
}
return true;
}
}
斐波那契数列(递归)&求100以内的素数的更多相关文章
- PHP算法之斐波那契数列(递归)
/*斐波那契数列 源代码分析 f(x) = 1 ; 当 x < 2 ; f(x) = f(x-1)+f(x-2); 当 x >= 2 ; 通项式为:fn ={((1+根号5)/2)^n-( ...
- python之斐波那契数列递归推导在性能方面的反思
在各种语言中,谈到递归首当其冲的是斐波那契数列,太典型了,简直就是标杆 一开始本人在学习递归也是如此,因为太符合逻辑了 后台在工作和学习中,不断反思递归真的就好嘛? 首先递归需要从后往前推导,所有数据 ...
- DP思想在斐波那契数列递归求解中的应用
斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativ ...
- Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现
Reverse反转算法 #include <iostream> using namespace std; //交换的函数 void replaced(int &a,int & ...
- java递归 斐波那契数列递归与非递归实现
递归简单来说就是自己调用自己, 递归构造包括两个部分: 1.定义递归头:什么时候需要调用自身方法,如果没有头,将陷入死循环 2.递归体:调用自身方法干什么 递归是自己调用自己的方法,用条件来判断调用什 ...
- [剑指offer] 7. 斐波那契数列 (递归 时间复杂度)
简介: 杨辉三角每条斜线上的数之和就构成斐波那契数列. 思路: 参考文章:https://mp.weixin.qq.com/s?src=11×tamp=1551321876& ...
- 斐波那契数列 递归 尾递归 递推 C++实现
==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...
- [python]兔子问题,斐波那契数列 递归&非递归
假设一对幼年兔子需要一个月长成成年兔子,一对成年兔子一个月后每个月都可以繁衍出一对新的幼年兔子(即兔子诞生两个月后开始繁殖).不考虑死亡的情况,问第 N 个月时共有多少对兔子? 结果前几个月的兔子数量 ...
- 求前n项的斐波那契数列、求两个数的最小公倍数、求两个数的最大公约数
class Fib(object): def __call__(self,n): a=[0,1] for i in range(n-2): an ...
- 剑指offer-矩形覆盖-斐波那契数列(递归,递推)
class Solution { public: int rectCover(int number) { if(number==0 || number==1||number==2) return nu ...
随机推荐
- 聪明的Azure CDN,帮你找到云端捷径
你知道吗?身处上海和纽约的两个用户同时通过网络收看“春晚”直播,纽约播放得可能比上海还要更流畅,这当然不是因为纽约距离北京的直播机房更近或者网速更快,而是因为大年夜在大洋彼岸围观“春晚”的观众相对较少 ...
- Eclipse导入web项目后,run列表中没有run on server?
Eclipse导入web项目,没有run列表中run on server? 首先确保正确安装Tomcat和JDK .找到对于web项目的文件夹,打开文件夹下.project文件 <?xml ve ...
- python3绘图示例6-2(基于matplotlib,绘图流程介绍及设置等)
#!/usr/bin/env python# -*- coding:utf-8 -*- import os import numpy as npimport matplotlib as mpltfro ...
- JavaScript 获取 当前日期和三十天以前日期
//获取当前日期 var myDate = new Date(); var nowY = myDate.getFullYear(); var nowM = myDate.getMonth()+1; v ...
- 获取文件绝对路径:__FILE__与$_SERVER[SCRIPT_FILENAME'']的区别
1.获取路径 (1)__FILE__ 获取某文件在本地目录中的绝对路径,(也就是说,哪个文件执行这行代码,它就获取哪个文件的绝对路径) (2)$__SERVER['SCRIPT_FILENAME'] ...
- Selenium入门9 上传文件
上传文件步骤 1 找到文件上传的input标签 find_element_by_css_selector("input[type='file']") 2 用send_keys传入 ...
- VUE的组件DEMO
组件的基本写法可以如下: HTML: <div id="components-demo"> <button-counter self-data="thi ...
- Android OpenGL ES 画球体
近期由于兴趣所向.開始学习OpenGL绘图. 本文以"画球体"为点,小结一下近期所学. > 初识OpenGL ES 接触OpenGL是从Android開始的.众所周知,And ...
- [Linux发行版] 常见Linux系统下载(转)
本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...
- Django:restframework与缓存By大熊
http://chibisov.github.io/drf-extensions/docs/#cache-key 以上为drf-ext的文档 首先我们要下载两个东西,因为缓存我们用redis所以下 D ...