- 浏览: 889892 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (509)
- android (55)
- CSS (23)
- eclipse (25)
- Data Structes and Algorithms (53)
- J2SE (87)
- Java_面试学习_j2se (26)
- java_面试学习_非技术 (13)
- java_gui (2)
- java_设计模式 (27)
- JDBC (10)
- java_web (15)
- hibernate (5)
- Oracle (37)
- Struts2 (7)
- Word-----dos (24)
- Jbpm (3)
- java小技巧 (8)
- math (1)
- flex (12)
- WebService (4)
- 生活 (9)
- 小框架或小语言 (27)
- spring (1)
- 面试~~~软实力 (7)
- jstat的用法 (1)
- jmap (1)
- 数据链路层和传输层的流量控制区别 (1)
- shell (0)
- 财商 (1)
- javascript (0)
- js研究 (1)
- 代码收集 (0)
最新评论
-
海尔群:
http://jingyan.baidu.com/articl ...
android加密 -
完美天龙:
------------------------- ...
asm----字节码操纵 -
houniao1990:
大神,请问 string 类型 定义为 oracle的 cha ...
hibernate注解 -
JamesQian:
Line:103
f.doFilter(msg);
是否需 ...
责任链模式_过滤器模式 -
sacoole:
好评
interview--- 如何从N个数中选出最大(小)的n个数?
从第三项起,每一项的数都是紧挨着它前面的两项的数字之和 千万记住:斐波那契的场景只是巧合。。。 有一个序列,首两项为0,1,以后各项值为前两项值之和,写一个方法来 实现这个序列的和 这就是著名的斐波那契哦。。。。 public static int getNumber(int curCount){ if(curCount == 1){ return 0; }else if(curCount == 2){ return 1; }else{ int s = getNumber(curCount-1)+getNumber(curCount-2); return s; } } /*这里只能得到当前的值。。。各项值为前两项值之和---说明要得到每一项的值需要递归 那么我要计算总数呢。。。如果用这个递归函数的话,则用最傻的方法。。循环的get每一值,显然效率不高。。。怎么办。。??? 换思维方式: 如果我要求和:Sn = an + Sn-1 这个式子要求已知an才可以用。。。新定义一种求和: Sn = a1 + Sn-1 其中Sn-1 = a2+a3+a4+ ...+ an 这样的话a1是已知的了 注意:只能用递归的观点来理解,sum(int n) 就是计算前n项之和,如果n=2 那么代表前两个数之和 1+0 =1 这里返回1 ,n=1 其实没有什么含义,只是为了兼容n=1的情况,完全可以不要,当n>2时,我们先计算 curC + sum(curB, curC,n-1); 也就是a3+a4+...an-3,最后计算 a1+a2,从运行的宏观顺序来看是这样的。 */ public static int sum(int curA, int curB,int n) { //计算前n项的和 if(n==2){ return 1; //如果前n项计算完毕则返回,注意第一项和第二项已经不用计算了 }else if(n == 1){ return 0; }else{ int curC = curA+curB; //这个是这一步求出来的数,作为下一步的B return curC + sum(curB, curC,n-1); } }//与先前不同的是初始值应该设置进去,因为这是递推式的递归 public static int sum(int curA, int curB,int n,int startA,int startB) { //计算前n项的和 if(n==2){ return startA+startB; }else{ int curC = curA+curB; return curC + sum(curB, curC,n-1);//先计算a3+a4+...到了终止的时候再加a1+a2 } } 斐波那契的应用: 有一对兔子从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 像这种场景----请记住---它就是斐波那契场景,因为人们通过最笨的办法数这个兔子总数的时候,发现出生的兔子数符合斐波那契规律,所以才能用斐波那契来求。。。我们把这道题作为一个模板,以后看到类似的情况,就先猜想他是不是斐波那契,如果是,那么直接用斐波那契就简单许多,注意:这里是数出来的东西符合斐波那契,而不是他很清楚的具有斐波那契语义 因为这种东西很晕,所以我把兔子分成两类,第一类是可以生的,第二类是不可以生的 1 2 3 4 5 6 7 8 9 10 可以生的 1 1 1 1 2 3 5 8 13 21 离可以生1个月 0 0 1 1 2 3 5 8 13 离可以生2个月 1 1 2 3 5 8 13 21 这样就不晕菜了。。。 然后汇总一下: 1 2 3 4 5 6 7 8 9 10 1 1 2 3 5 8 13 21 34 55 注意:如果把题目改成有一对兔子从出生后第四个月起。。。。那么他就不是斐波那契数列了,只是这个题目恰好他的数列是斐波那契,才可以用这个函数来求解而不用考虑他的语义,如果改掉之后就只能用面向对象来做了。。。 //用递归 private static long rabbit(int monthNum) { if(monthNum == 1 || monthNum == 2){ return 1L; }else{ return rabbit(monthNum-1) + rabbit(monthNum-2); } } } 树枝生长问题: 一棵树一年后长出一条新枝,新枝隔一年后成为老枝老枝便可每年长出一条新枝,如此下去,十年后树枝将有多少? 蜜蜂的路径问题: 一只蜜蜂从蜂房 A 出发,想爬到 1 , 2 , 3…… , n 号蜂房,但只允许它自左向右(不许反方向倒走) . 则它爬到各号蜂房的路线数各是多少? 1 3 5 7 。。。 n-1 bee 2 4 6。。。。n-2 n 蜜蜂爬进n 号蜂房有下面两种途径: 一.不经过n-1 号蜂房,直接从n-2 号蜂房进入第 n号蜂房的路线有f(n-1) 条; 二.经过n-1 号蜂房进入第n 号蜂房的路线有f(n) 条 . 所以就有f(n+1)=f(n)+f(n-1) . 即 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34 、 55 、 89 …… 1,有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法? 答:这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种方法……所以,1,2,3,5,8,13……登上十级,有89种。 2,数列中相邻两项的前项比后项的极限是多少,就是问,当n趋于无穷大时,F(n)/F(n+1)的极限是多少? 答:这个可由它的通项公式直接得到,极限是(-1+√5)/2,这个就是所谓的黄金分割点,也是代表大自然的和谐的一个数字。
发表评论
-
j2se---jmap看性能
2011-08-05 09:41 1068dump一下内存jmap -dump:format=b,fil ... -
程序员面试题精选100题(60)-判断二叉树是不是平衡的
2011-07-24 15:33 6791题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某 ... -
程序员面试题精选100题(58)-八皇后问题
2011-07-24 12:22 1131题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任 ... -
程序员面试题精选100题(57)-O(n)时间的排序
2011-07-24 12:02 1214题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法 ... -
程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
2011-07-24 11:15 1738题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、 ... -
程序员面试题精选100题(51)-顺时针打印矩阵
2011-07-24 09:35 1645题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个 ... -
程序员面试题精选100题(50)-树为另一树的子结构
2011-07-23 20:24 1090题目:二叉树的结点定 ... -
程序员面试题精选100题(49)-复杂链表的复制
2011-07-23 19:49 1370题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下 ... -
程序员面试题精选100题(48)-二叉树两个结点的最低共同父结点
2011-07-21 19:17 2176题目:二叉树的结点定义如下: struct TreeNode ... -
程序员面试题精选100题(47)-数组中出现次数超过一半的数字
2011-07-21 18:56 1127题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个 ... -
程序员面试题精选100题(46)-对称子字符串的最大长度
2011-07-21 18:46 1603题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。 ... -
程序员面试题精选100题(45)-Singleton
2011-07-21 18:38 985不说了。。。见设计模式 -
程序员面试题精选100题(44)-数值的整数次方
2011-07-19 22:22 1567题目:实现函数double Pow ... -
程序员面试题精选100题(43)-n个骰子的点数
2011-07-19 20:02 2213题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入 ... -
程序员面试题精选100题(42)-旋转数组的最小元素
2011-07-19 18:56 1025题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数 ... -
程序员面试题精选100题(41)-把数组排成最小的数
2011-07-17 23:35 1256题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出 ... -
程序员面试题精选100题(38)-输出1到最大的N位数
2011-07-17 22:49 1572题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入 ... -
程序员面试题精选100题(37)-寻找丑数
2011-07-17 22:15 2583题目:我们把只包含因子2、3和5的数称作丑数(Ugly Num ... -
程序员面试题精选100题(36)-在字符串中删除特定的字符
2011-07-17 21:17 1027题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字 ... -
程序员面试题精选100题(35)-找出两个链表的第一个公共结点
2011-07-17 20:32 1273题目:两个单向链表,找出它们的第一个公共结点。 两个链表如果 ...
相关推荐
算法基础与递归 在计算机科学中,递归算法是一种非常重要的算法设计技术。递归算法的基本思想是将问题分解成更小的子问题,然后使用同样的方法解决这些子问题,直到问题的规模小到可以直接解决为止。本文将通过实验...
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为...1. 递归,面向过程编程,简单直接 2. 面向对象编程,别人写的,
例如,用分治法处理递归问题,如计算斐波那契数列,可以显著提高效率。而回溯法在解决棋盘游戏问题时,如棋类的走法搜索,配合栈可以实现深度优先搜索。 总的来说,“栈与递归--含分治与回溯”这个资料可能涵盖了栈...
递归的另一个经典应用是斐波那契数列(Fibonacci sequence),其定义为:`F(1) = 1, F(2) = 1, F(n) = F(n-1) + F(n-2)`。如下所示的递归函数虽然直观,但效率低下,因为存在大量重复计算: ```cpp int fibonacci...
递归在解决问题时有其独特的优势,它能将复杂问题分解为相似的子问题,如求解阶乘和斐波那契数列。对于斐波那契数列F(n) = F(n-1) + F(n-2),递归方式可以直观地表达问题的结构。然而,需要注意的是,过度的递归可能...
递推、递归、分治和回溯是计算机科学中解决复杂问题的四种常用策略,它们在算法设计中扮演着重要角色。 递推算法是一种基于已知数据推导后续数据的计算方法。例如,整数阶乘、斐波那契数列等经典问题都可以用递推...
递归在解决分治问题(如斐波那契序列、树遍历等)时特别有用。 总之,Python的函数和递归是实现程序模块化、降低复杂度和提高效率的重要工具。通过熟练掌握这些概念,开发者可以编写出更高效、更易于维护的代码。
标题中的“【Python学习-递归-斐波那契数列】【剑指offer】之跳台阶”是指通过Python编程语言来学习递归方法,并通过解决一个经典的递归问题——跳台阶,来阐述这一概念。递归是编程中一种重要的算法,它通过函数...
本文将探讨如何使用C++语言来实现Fibonacci数列的递归和非递归算法。 **递归算法** 递归是一种解决问题的方法,它定义一个函数或过程通过调用自身来解决问题。对于Fibonacci数列,递归实现非常直观: ```cpp int ...
在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)// 方法一:int F
使用C++非递归实现fibonacci数列,对正在学习算法的同学应该挺有帮助的
计算fibonacci数列每一项时所需的递归调用次数
基于Python实现的数据结构与算法完整源代码+超详细注释(包含46个作业项目) 项目包含: 01_变位词问题 02_python数据类型的性能 03_python实现ADT Stack ...a2_斐波那契数列 aa_LCS aa_最长公共子序列
斐波那契数列(fibonacci)-java的非递归实现。
Fibonacci数列的java实现,包括递归与非递归实现
在压缩包中的"Fibonacci"文件可能包含了这个C程序的源代码,你可以打开查看并运行它来体验递归斐波那契函数的效果。理解并能熟练运用递归是每个程序员必备的技能,因为它不仅在解决斐波那契序列这类问题上发挥作用,...
这个数列由意大利数学家斐波那契(Leonardo Fibonacci)在13世纪引入,用于模拟兔子繁殖的问题,因此也被称为“兔子数列”。数列的定义非常简单:第一项是0,第二项是1,之后每一项都是前两项之和。用数学公式表示...
在这个程序中,`fibonacci` 函数是递归函数,它接收一个整数 `n` 作为参数,如果 `n` 小于或等于1,函数直接返回 `n`,否则返回 `fibonacci(n - 1)` 加上 `fibonacci(n - 2)` 的结果。在 `main` 函数中,我们获取...
斐波那契递归.cpp