Fibonacci的尾递归实现

原创 2015年11月18日 08:58:56

前段日子面试,碰到的lua语言问题,大致是说对于一个Fibonacci数列,要求给定一个正整数n,就生成从0开始的n个Fibonacci数存入一个表中,然后打印出来,要求使用尾递归。

个人对lua也算是刚入手阶段,折腾几下总算做了出来,记下来免得过些日子又忘了……


local function fibonacci(n)
  local t = {}
  if n <= 0 then
    return t
  end
  local function fib(t, num1, num2)
    len = #t
    table.insert(t, len + 1, num1 + num2)
    if #t == n then
      return t
    else
      return fib(t, num2, num1 + num2)
    end
  end
  t = fib(t, -1, 1)
  return t
end

local function main()
  local fibt = fibonacci(50)
  for _, v in ipairs(fibt) do
    print(v)
  end
end
main()


使用尾递归计算Fibonacci数列

   在过程式,面向对象编程中我们使用递归解决问题的机会不多.但是使用递归方式解决问题是一种比较直观而且简洁的方式,不过编译器对递归没有特别的优化.所以我们很容易写出效率不高的递归程序.而所谓尾递归就...
  • fuadam
  • fuadam
  • 2007年12月19日 22:54
  • 3195

fibonacci的几种实现及尾递归

Java代码   /**   * java version "1.6.0_17"   * 尾递归与迭代实现具有相当的性能;   * 缓存实现的性能略高于非尾递归实现;   * 递...
  • judyge
  • judyge
  • 2015年10月28日 22:25
  • 330

递归和尾递归的比较,斐波那契

尾部递归是一种编程技巧。如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。尾部递归的函数有助将算法转化成函数编程语言,而且从编译器角度来说,亦容易优化成为普通循环。这是因为从电脑的基本...
  • mr_listening
  • mr_listening
  • 2016年04月09日 18:11
  • 2963

什么是尾递归?javascript 尾递归优化

尾递归和一般的递归不同在对内存的占用,普通递归创建stack累积而后计算收缩,尾递归只会占用恒量的内存(和迭代一样)。 递归是指函数直接或间接地调用自己。 (普通递归) :function...
  • jayhkw
  • jayhkw
  • 2017年10月27日 15:00
  • 378

递归和尾递归的区别和原理

注意哦,这里尾递归其实还用了一个重载,然后尾递归调用,其实最精髓就是 通过参数传递结果,达到不压栈的目的。C中玩好了尾递归,代码可以很秀。递归,就是在运行的过程中调用自己。构成递归需具备的条件: 1....
  • zcyzsy
  • zcyzsy
  • 2017年08月14日 00:08
  • 1380

阶乘的尾递归形式

以尾递归的形式定义计算 !
  • gy910210
  • gy910210
  • 2014年10月17日 02:28
  • 987

Scala中尾递归

     作为一个程序员,大家对递归应该都很熟悉,在《 数据结构与算法分析:C描述》书中,已打印链表为例,提到了尾递归,并指出了尾递归是对递归及其不当的使用,它指出虽然编译器会对递归进行自动优化...
  • hujun8610
  • hujun8610
  • 2014年07月17日 17:17
  • 803

尾递归 or for循环?

/*淮南师范学院 电子工程学院 夏健钧 2017/3/25*/ /*factor.c -- 使用循环和递归计算阶乘*/ #include long fact (int n); long rfa...
  • shuaiqidexiaoxia
  • shuaiqidexiaoxia
  • 2017年03月25日 21:29
  • 154

ES6尾递归优化的实现

先看一个正常的递归函数。function sum(x, y) { if (y > 0) { return sum(x + 1, y - 1); } else { return ...
  • hsl0530hsl
  • hsl0530hsl
  • 2017年09月24日 15:41
  • 403

Scala学习第八弹:递归与尾递归

递归函数在函数式编程中是实现循环的一种技术。 举例: 计算n! def factorial(n:Int):Int= if (n else n*factorial(n-1) 但是递归会造成堆栈的...
  • u014791046
  • u014791046
  • 2016年05月02日 15:15
  • 988
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Fibonacci的尾递归实现
举报原因:
原因补充:

(最多只允许输入30个字)