【递归和循环】

题目:

  大家都知道斐波那契数列,现在要求输入一个整数N,请输出斐波那契数列的第N项,以及前N项。 如:N <=39

下面是斐波那契数列的实现:

-module(feibo).
-export([feibo_list/1,ele/1]). %% 运行:feibo:feibo_list(5).
%% 结果示例:【1,1,2,3,5】 %% 函数element主要为了计算斐波那契数列的第N个元素
ele(1) -> 1;
ele(2) -> 1;
ele(N) -> ele(N-1) + ele(N-2). %% 给定一个N,求出斐波那契的前N个数
feibo_list(N) -> feibo_list([], N).
feibo_list(L, 0) -> L;
feibo_list(L, N) -> feibo_list([ele(N)|L], N-1).

典型的数学归纳法,递归算法。

下面是尾递归的实现。运行时间和效率远远高于上面递归算法。可以timer:tc/3自测

-module(fib).

-compile(export_all).

%%尾递归
getfib(N,X,Y) when N<3 ->
Y;
getfib(N,X,Y) ->
getfib(N-1,Y,X+Y).

尾递归相比递归的好处,一次压栈出栈,防止栈爆掉。

问题引申和扩展:

    [跳台阶]
[题目]
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

[解析]
与斐波那契数列的求解过程类似。典型的动态规划问题。对于第 n 级台阶,
我们可以从第 n-1 级台阶一步到达,也可以从第 n-2 级台阶一步达到,
则有递归式:f[n] = f[n-1] + f[n-2],
初始状态 f[1] = 1, f[2] = 2。

erlang的斐波那契数列的更多相关文章

  1. C#求斐波那契数列第30项的值(递归和非递归)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)

    对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...

  3. js中的斐波那契数列法

    //斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...

  4. 剑指Offer面试题:8.斐波那契数列

    一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...

  5. 算法: 斐波那契数列C/C++实现

    斐波那契数列: 1,1,2,3,5,8,13,21,34,....     //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...

  6. 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

    P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...

  7. Python递归及斐波那契数列

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...

  8. 简单Java算法程序实现!斐波那契数列函数~

    java编程基础--斐波那契数列 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:可能出现的情况:(1) n=1 ,一种方法 ;(2)n=2 ...

  9. js 斐波那契数列(兔子问题)

    对于JS初学者来说,斐波那契数列一直是个头疼的问题,总是理不清思路. 希望看完这篇文章之后会对你有帮助. 什么是斐波那契数列 : 答: 斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契(Le ...

随机推荐

  1. [CF3B]Lorry

    题目大意: 有$n(n\leq 10^5)$个物品,背包的容量为$m(m\leq 10^9)$.每个物品有重量$w_i(w_i\in\{1,2\})$和价值$v_i(v_i\leq 10^4)$.问最 ...

  2. Leave It Behind and Carry On ---- 高一下期末考反思 [补档]

    背景 这个学期的前\(\frac{3}{4}\), 我都是在停课集训中度过的, 先是GDKOI, 再是北京集训, 最后是GDOI, 结果GDOI还没进day3就滚粗了. 学校的内容是考完GDOI后回学 ...

  3. DELPHI的一些开源项目GIT地址

    DELPHI的一些开源项目GIT地址 Delphi-Cross-Sockethttps://github.com/winddriver/Delphi-Cross-Socket 跨平台的SOCKET库 ...

  4. ubuntu 下安装nodejs以及pm2

    ubuntu 12.04服务器可以使用apt-get方式安装Node JS,但是,安装完后的版本为v0.6.12的版本,如果我们想要使用新一点的版本需要做如下配置: 1 2 3 4 apt-get i ...

  5. MySQL不能启动 Can't start server : Bind on unix socket: Permission denied

    转载博客地址:http://www.linuxidc.com/Linux/2010-04/25709.htm MySQL服务器突然不能启动,查看最后的启动日志如下: 080825 09:38:04 m ...

  6. Mongodb副本集+分片集群环境部署

    前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...

  7. centos7 mongodb3.2与3.4版本安装(转)

    一.安装环境及配置yum vi /etc/yum.repos.d/mongodb-org-3.2.repo [mongodb-org-3.2] name=MongoDB Repository base ...

  8. eclipse自动添加作者、日期等注释

    使用eclipse的时候一般会添加自己的注释,标注日期作者等内容,我总结的添加注释的方式有两种:一.在新建class时自动添加注释:二.通过快捷键自动添加注释.下面分别描述一下添加方式. 一.新建cl ...

  9. 转: Eclispe的远程开发

    from: http://www.thinksaas.cn/topics/0/528/528009.html 新项目中用到了所谓的Eclipse远程开发.参考: http://www.eclipse. ...

  10. Haproxy 8种算法+Session共享

    Haproxy有8种负载均衡算法(balance),分别如下: 1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法 2.balance static-rr # 根据权重, ...