标签: fibonacci

Fibonacci调用堆栈中叶子与总节点的比率

如果你要看一个计算第n个Fibonacci数的递归实现(根100,子99和98,孙子98,97,97和96等等),大概是什么比例的数量留下递归树中的节点总数?

    100
   /   \
  98   97
 /  \   .
96  97  .
.    .  .
.    .  
Run Code Online (Sandbox Code Playgroud)

不是家庭作业,只是在学术上对此感到好奇.(是的,我意识到递归实现是计算斐波纳契数的一种可怕的方法)

algorithm math fibonacci

5
推荐指数
2
解决办法
1736
查看次数

使用python中的公式计算第n个斐波纳契数

我正在使用(a)线性方法计算第n个斐波那契数,以及(b)表达式

Python代码:

'Different implementations for computing the n-th fibonacci number'

def lfib(n):
    'Find the n-th fibonacci number iteratively'
    a, b = 0, 1
    for i in range(n):
        a, b = b, a + b
    return a

def efib(n):
    'Compute the n-th fibonacci number using the formulae'
    from math import sqrt, floor
    x = (1 + sqrt(5))/2
    return long(floor((x**n)/sqrt(5) + 0.5))


if __name__ == '__main__':
  for i in range(60,80):
    if lfib(i) != efib(i):
      print i, "lfib:", lfib(i)
      print " …
Run Code Online (Sandbox Code Playgroud)

python algorithm fibonacci

5
推荐指数
1
解决办法
5605
查看次数

在java中,我如何找到第n个Fibonacci数?

确定Fibonacci序列很容易弄清楚:

int num = 0;
int num2 = 1;
int loop;
int fibonacci;
System.out.print(num2);
for (loop = 1; loop <= 10; loop ++)
{
    fibonacci = num + num2;
    num = num2;
    num2 = fibonacci;
    System.out.print(" " + fibonacci);
}
Run Code Online (Sandbox Code Playgroud)

我的问题在于试图精确定位指定N的值.如果我想在序列中找到第6个元素,即8,我将如何找到该数字,只有那个数字?

java loops for-loop fibonacci

5
推荐指数
1
解决办法
4万
查看次数

在C#中计算Fibonacci

我试图以一种非常简单的方式计算C#中的Fibonacci序列,但是当涉及到更高的数字时,它会通过给出错误的答案来阻止并停止工作.

ulong num = 1;
ulong lnum = 0;
uint x = 1;

private void Form1_Load(object sender, EventArgs e)
{
    listBox1.Items.Add("(0) " + 1);
}

private void timer1_Tick(object sender, EventArgs e)
{
    if (x <= 1000)
    {
        ulong newnum = lnum + num;
        listBox1.Items.Add("(" + x + ") " + newnum);
        listBox1.SetSelected((int)x, true);
        lnum = num;
        num = newnum;
        x++;
     }
}
Run Code Online (Sandbox Code Playgroud)

我正在通过一种方式制作它,我可以通过一次将它们添加到列表框1来添加数字.

c# fibonacci ulong

5
推荐指数
1
解决办法
961
查看次数

Haskell-在列表中查找元素并返回其位置

所以我需要将一个函数描述为

invFib :: Integer -> Maybe Integer
Run Code Online (Sandbox Code Playgroud)

取一个整数并在斐波那契序列中查找它(如下面的函数所述)

fibs :: [Integer]
fibs = 0:1:(zipWith (+) fibs (tail fibs)) 
Run Code Online (Sandbox Code Playgroud)

并返回数字示例的索引:

invFib 0 〜> Just 0

invFib 1〜> Just 1Just 2

map invFib [54, 55, 56] 〜> [Nothing,Just 10,Nothing]

invFib (fibs !! 99) 〜> Just 99

我尝试创建一个函数,它获取整数列表并吐出索引,但它仍然失败.有什么想法吗?

这是我试过的功能 -

findNum :: [Integer] -> Integer -> Integer -> Integer
findNum x:xs y z = if x == y
                then z
                else findNum xs y (z+1)
Run Code Online (Sandbox Code Playgroud)

编辑:该函数冻结不在斐波那契序列中的数字,也只在输入1时显示1个值

invFib :: Integer -> …
Run Code Online (Sandbox Code Playgroud)

indexing haskell list fibonacci maybe

5
推荐指数
2
解决办法
4122
查看次数

Fibonacci数字以初始的两个值作为参数

我一直在努力创建一个无限的斐波纳契列表,产生的函数可以将前2个值作为参数.

如果没有指定前两个值,就可以这样做

fib = 1 : 1 : zipWith (+) fib (tail fib)
Run Code Online (Sandbox Code Playgroud)

假设我想用5和6而不是1,1或0,1开始斐波那契序列,那么我将不得不改变上面的代码.但是当我试图制作一个惰性列表生成器,我可以在其中指定斐波那契序列的前2个值时,我很难过.我想出了这个但是没有用.

fib a b = a : b : zipWith (+) fib (tail fib)
Run Code Online (Sandbox Code Playgroud)

问题很明显.我试图转换硬编码列表的使用.我怎么解决这个问题?

haskell fibonacci lazy-evaluation

5
推荐指数
1
解决办法
362
查看次数

使用Haskell中的列表推导表示Fibonacci数

我编写了以下代码来生成包含Fibonacci数字的列表.

fibonacci = [a + b | a <- 1:fibonacci, b <- 0:1:fibonacci]
Run Code Online (Sandbox Code Playgroud)

我希望列表[1,2,3,5,8,13..]的输出是,但输出不是Fibonacci序列.

我不太明白为什么它不起作用.

我的理由是,如果斐波那契数字是[1,2,3,5,8,13..]那么这将是等于2名列表之[1,1,2,3,5,8,13..][0,1,1,2,3,5,8,13..],这相当于1:[1,2,3,5,8,13..]0:1:[1,2,3,5,8,13..]1:fibonacci0:1:fibonacci

我已经查找了实现此序列的其他方法,但我真的想知道为什么我的代码不起作用.

haskell list-comprehension fibonacci

5
推荐指数
3
解决办法
1865
查看次数

Google foobar python:两项测试均失败-可爱的幸运羔羊(序列计数)

我受邀参加Google的foobar挑战赛。我目前在2.2级时遇到以下问题。

可爱的幸运羔羊

做一个小伙子并不单单是苦力。有时,当Lambda指挥官感到慷慨时,她会分发Lucky LAMBs(Lambda的多用途钱袋)。武装分子可以使用幸运的羔羊来买东西,例如第二双袜子,铺床上的枕头,甚至是第三顿日常餐!但是,要传播出LAMB并不容易。每个小伙子都有严格的资历等级,必须予以尊重-否则小伙子将起义,而你们所有人都将再次被降级为奴才!

为避免起义,必须遵循4条关键规则:

  1. 最年轻的小伙子(资历最少)刚好得到1个LAMB。(一个团队中总是至少有1个随从。)
  2. 如果紧随其后的人获得的LAMB数量增加一倍以上,那将成为反叛者。
  3. 如果向其下两个下属提供的LAMB数量超过其获得的LAMB数量,则该弓箭手将起义。(请注意,两个最初级的he夫不会有两个下属,因此此规则不适用于他们。第二个最初级的he夫至少需要与最初级的he夫一样多的LAMB。)
  4. 您总能找到更多要支付的he夫-司令官有大量员工。如果有足够的LAMB剩余,可以在遵守其他规则的同时将另一名行政长官添加为最高级,则您必须始终添加该名警官并向其付款。

请注意,您可能无法分发所有LAMB。单个LAMB不能再细分。也就是说,所有的追随者必须获得正整数的LAMB。

编写一个名为answer(total_lambs)的函数,其中total_lambs是您要除法的讲义中LAMB的整数。它应该返回一个整数,该整数表示可以共享LAMB的小伙子们的最小数量和最大数量之间的差额(即,分别对您所支付的人尽可能慷慨和尽可能小气),同时仍然要遵守上述所有条件避免起义的规则。

例如,如果您有10个LAMB,并且尽可能地慷慨,则您只能支付3名追随者(按升序排列,分别有1、2和4名LAMB),而如果您太小气,则可以支付4追随者(1、2、3和3个小羊)。因此,answer(10)应该返回4-3 =1。为使事情变得有趣,Commander Lambda更改了幸运LAMB支出的大小:您可以期望total_lambs始终在10到10亿之间(10 ^ 9)。

我的方法和代码

为了找到最低限度的血统,必须慷慨地给予LAMB,其几何级数为 1,2,4,8 ...由于几何级数的总和为

($ S = 2 ^ n -1 $,因此,追随者的人数为[log_2(S + 1)]

要找到最大的帮手,必须以小气的方式给出LAMB,以使他们看起来像斐波那契1,1、2、3、5 ...我们可以使用斐波那契指数法来获得最大的帮手数量:

遵循python代码:

from math import sqrt
from math import log
from math import pow

def answer(total_lambs):
    phi = (1+sqrt(5))/2  # golden search ratio
    tau = (1-sqrt(5))/2  # equal to 1/phi
    eps = pow(10, -10)

    max_hunchmen = int(round(log((total_lambs + 1) * sqrt(5)+eps, phi))) - 2
    Fib_num = int(round((pow(phi, max_hunchmen+2)-pow(tau,max_hunchmen+2))/sqrt(5))) …
Run Code Online (Sandbox Code Playgroud)

python algorithm big-o fibonacci python-2.7

5
推荐指数
1
解决办法
3479
查看次数

计算数字,使得一个数字必须将其设定位数作为斐波纳契数?

给定范围[x,y]找到数字的数量,使得一个数字必须将其设置位数作为斐波纳契数?

例如:[15,17]

15 - 1111  - Count of bits is 4 - (4 is not a fibonacci  number)

16 - 10000 - Count of bits is 1 - (1 is a fibonacci number)

17 - 10001 - Count of bits is 2 - (2 is a fibonacci number)
Run Code Online (Sandbox Code Playgroud)

所以回答是 2 (16,17)

显然我们计算设置位并检查它是否fibonacci使用条件是否(5x^2 +/- 4)是一个完美的正方形.

注意:这是一个面试问题.面试官对上述方法不满意.

我们可以做得更好吗?

algorithm bit-manipulation fibonacci

5
推荐指数
1
解决办法
97
查看次数

为什么Fibonacci的实现速度极快?

Fibonacci的这种实现很容易理解但很慢:

fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
Run Code Online (Sandbox Code Playgroud)

实施Fibonacci之后很难理解,但速度非常快.它会立即在我的笔记本电脑上计算出第100,000个斐波纳契数.

fib = fastFib 1 1

fastFib _ _ 0 = 0
fastFib _ _ 1 = 1
fastFib _ _ 2 = 1
fastFib a b 3 = a + b
fastFib a b c = fastFib (a + b) a (c - 1)
Run Code Online (Sandbox Code Playgroud)

关于后一种实施,这里发生了什么神奇的事情,它是如何运作的?

recursion haskell fibonacci

5
推荐指数
0
解决办法
327
查看次数