精华内容
下载资源
问答
  • 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765……(1)fibonacci数列即斐波那契数列,它的特点是前面两个数的和等于后面的一个数,fib(0)=fib(1)=1.(2)斐波那契数列只有一个.(3)如...

    未完待续~

    了解fibonacci数列:

    斐波纳契数列(Fibonacci Sequence),又称黄金分割数列。

    1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765……

    (1)fibonacci数列即斐波那契数列,它的特点是前面两个数的和等于后面的一个数,fib(0)=fib(1)=1.

    (2)斐波那契数列只有一个.

    (3)如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:

    F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)

    显然这是一个线性递推数列。

    下面的例子fib(0)=fib(1)=1

    利用for循环

    输出范围内的数列:

    fibs = [1,1]

    for i in range(8):

    fibs.append(fibs[-2] + fibs[-1])

    # print(fibs)

    print(fibs) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

    输出特定个数元素的数列:

    fibs = [1,1]

    num = input('数列元素个数:')

    num=int(num)

    for i in range(num-2):

    fibs.append(fibs[-2] + fibs[-1])

    print(fibs)

    利用函数

    def fibs(num):

    result = [1,1]

    for i in range(num-2):

    result.append(result[-2] + result[-1])

    print(result)

    fibs(10)

    # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

    例题:

    使用函数输出指定范围内Fibonacci数的个数

    本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数输出两正整数m和n(0

    函数接口定义:

    在这里描述函数接口。例如:

    fib(n)

    PrintFN(m,n,i)

    裁判测试程序样例:

    在这里给出函数被调用进行测试的例子。例如:

    /* 请在这里填写答案 */

    m,n,i=input().split()

    n=int(n)

    m=int(m)

    i=int(i)

    PrintFN(m,n,i)

    输入样例:

    在这里给出一组输入。例如:

    20 100 6

    输出样例:

    在这里给出相应的输出。例如:

    fib(6) = 13

    4

    代码:

    def PrintFN(m,n,i):

    def fib(n):

    fibs = [1, 1]

    for i in range(n):

    fibs.append(fibs[-2] + fibs[-1])

    print("fib(%s)=%d"%(n,fibs[n]))

    fib(i)

    fibs = [1, 1]

    g = 0

    for i in range(n):

    fibs.append(fibs[-2] + fibs[-1])

    # print(fibs)

    if(m

    # print(fibs[i])

    g+=1 #数列个数

    print(g)

    m,n,i=input().split()

    n=int(n)

    m=int(m)

    i=int(i)

    PrintFN(m,n,i)

    展开全文
  • 首先想到的是用递归来解决求100内的斐波那契数列:def diGui(num=100):a,b = 0,1# 为了方便看打印,我就用list存一下lit = []while a < num:# print(a)lit.append(a)a, b = b,a+bprint(lit)diGui()# 打印输出为[0, ...

    首先想到的是用递归来解决

    求100内的斐波那契数列:

    def diGui(num=100):

    a,b = 0,1

    # 为了方便看打印,我就用list存一下

    lit = []

    while a < num:

    # print(a)

    lit.append(a)

    a, b = b,a+b

    print(lit)

    diGui()

    # 打印输出为

    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

    # 求1000内的

    diGui(1000)

    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]

    递归是比较容易解决,但是这个对内存很不友好,要是后面求10000,100000,甚至更大的呢!

    所以就想到可以用python的生成器,如果一个函数中有yield关键字,那他就是一个生成器(generator).

    import sys

    # 这里其实和上面的递归写法很类似,只需要把print(a)换成yeild就行

    def generator(num=100):

    a,b = 0,1

    while a < num:

    # print(a)

    yield a

    a, b = b,a+b

    # 注意:这里的g是一个生成器对象

    g = generator()

    print(type(g))

    # 然后我调用next()方法取值

    while True:

    print(next(g))

    # 重复调用next()方法,但是这里会抛异常,因为重复调用next()方法,直到结束

    Traceback (most recent call last):

    File "D:/xxxxxxx.py", line 60, in

    print(next(g))

    StopIteration

    0

    1

    1

    2

    3

    5

    8

    13

    21

    34

    55

    89

    Process finished with exit code 1

    # 所以我们可以try一下,捕获它,让程序正常结束

    while True:

    try:

    # print(next(g))

    n = next(g)

    if n < 100:

    print(n)

    except StopIteration:

    print(‘没有了!‘)

    sys.exit() # sys是python的模块,需要import

    # 最后输出

    0

    1

    1

    2

    3

    5

    8

    13

    21

    34

    55

    89

    没有了!

    python实现斐波那契数列

    展开全文
  • 斐波那契数列是递归定义的,这里就涉及到匿名函数如何调用自身的问题。基于定义,可以直接想到以下最直观的写法:fib = lambda n: 1 if n <= 1 else fib(n-1) + fib(n-2)其他答主也提到,这个实现的时间复杂度会...

    思路:如果要一行代码实现定义,通常会想到用匿名函数(lambda表达式)。斐波那契数列是递归定义的,这里就涉及到匿名函数如何调用自身的问题。基于定义,可以直接想到以下最直观的写法:

    fib = lambda n: 1 if n <= 1 else fib(n-1) + fib(n-2)

    其他答主也提到,这个实现的时间复杂度会很高(其实是指数级别的)。而通过优化可以把时间复杂度降低到线性, @吴扬 的回答就是如如此:

    fib = lambda n, a=1, b=1: a if n == 0 else fib(n-1, b, a+b)

    但以上两个答案都有共同的局限性:它们都调用了一个被命名为“fib”的函数。但是,如果函数没有名字,就无法调用它自身。现在将lambda表达式赋值给一个变量fib,相当于“取消”了匿名函数的匿名性,才能实现递归函数“调用自身”的操作。我们可以用类似fib(5)的方法调用这个函数,但如果我们想要将函数的定义和调用都在一行代码中完成,采用类似(lambda x: x + 1)(3)这种方式,定义依然是匿名的,应该怎么做呢?

    答案是,把函数本身作为它自身的一个参数:

    lambda n, fib: 1 if n <= 1 else fib(n-1, fib) + fib(n-2, fib)

    这样做,就相当于在每次递归调用时,都“保留”了这个函数的定义。如果想要在一行代码里调用这个函数求第N项斐波那契数列的值,只需要将这个匿名函数本身作为调用的一个参数传入:

    (lambda n, fib: 1 if n <= 1 else fib(n-1, fib) + fib(n-2, fib))(N, lambda n, fib: 1 if n <= 1 else fib(n-1, fib) + fib(n-2, fib))

    上面这行代码非常绕,如果我们把函数的定义,即

    lambda n, fib: 1 if n <= 1 else fib(n-1, fib) + fib(n-2, fib)

    替换成字符串F,那么上述的调用就相当于:

    (F)(N, F)

    然后,我们为函数的fib参数提供一个默认值,这样的话,就能避免调用函数时额外传入一个参数:

    lambda n, fib=(lambda n, fib: 1 if n <= 1 else fib(n-1, fib) + fib(n-2, fib)): 1 if n <= 1 else fib(n-1, fib) + fib(n-2, fib)

    如果采用线性时间复杂度的定义,再为匿名函数的参数fib设置一个默认值,它会长得像这样:

    lambda n, a=1, b=1, fib=(lambda n, a, b, fib: a if n == 0 else fib(n-1, b, a+b, fib)): a if n == 0 else fib(n-1, b, a+b, fib)

    到这一步才算大功告成,我们就可以在一行代码中实现斐波那契数列的定义和调用。。。

    (lambda n, a=1, b=1, fib=(lambda n, a, b, fib: a if n == 0 else fib(n-1, b, a+b, fib)): a if n == 0 else fib(n-1, b, a+b, fib))(6) # 13

    要输出从第一项开始的数列的值也很容易了:

    [(lambda n, a=1, b=1, fib=(lambda n, a, b, fib: a if n == 0 else fib(n-1, b, a+b, fib)): a if n == 0 else fib(n-1, b, a+b, fib))(i) for i in range(10)]

    # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

    这个答案是看了有关不动点组合子的知识后想到的。继续阅读:Fixed-point Combinator​en.wikipedia.org

    展开全文
  • 今天我们来使用Python实现递归算法求指定位数的斐波那契数列首先我们得知道斐波那契数列是什么?斐波那契数列又叫兔子数列斐波那契数列就是一个数列从第三项开始第三项的值是第一项和第二项的和依次类推其次我们再来...

    今天我们来使用Python实现递归算法求指定位数的斐波那契数列

    首先我们得知道斐波那契数列是什么?

    斐波那契数列又叫兔子数列

    斐波那契数列就是一个数列从第三项开始第三项的值是第一项和第二项的和依次类推

    其次我们再来看递归算法是什么?

    递归就是如果函数(子程序)包含了对其自身的调用,该函数就是递归的

    话不多说上案例:

    第一种方法:不使用递归算法

    #首先定义一个新的列表来储存最后的结果

    new_list = []

    # 然后让用户输入指定位数

    my_put = int(input("请输入使用递归算法求指定位数的斐波那契数列的位数: "))

    # 利用for循环来遍历数组

    for idx in range(my_put):

    # 利用if判断第使得第一位和第二位都为1

    if idx == 0:

    new_list.append(1)

    elif idx == 1:

    new_list.append(1)

    # 第三次的时候 当idx等于二的时候 然后第三项的话 应该的是第一项和第二项的和第一项的索引是0 第二项的索引是1

    #但是上面if判断以后 下面从idx为二的时候开始

    # 所以应该是索引为idx-2和索引为idx-1的相加得出第三项

    else:

    new_list.append(new_list[idx - 2] + new_list[idx - 1])

    # 最后输出最后的数列

    print(new_list)

    第二种方法:使用递归算法

    def get_num(n):

    # 获取斐波拉契数列中第n个数字的值

    if n == 1 or n == 2:

    return 1

    return get_num(n - 1) + get_num(n - 2)

    # 把获取的斐波拉契数字存放到列表中

    nums = []

    for i in range(1, 9):

    nums.append(get_num(i))

    # get_num获得一个斐波拉契数字

    print(nums)

    两种方法最后的运行结果都为:

    请输入使用递归算法求指定位数的斐波那契数列的位数: 9

    [1, 1, 2, 3, 5, 8, 13, 21, 34]

    总结

    到此这篇关于利用Python实现斐波那契数列的文章就介绍到这了,更多相关Python实现斐波那契数列内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    本文标题: 利用Python实现斐波那契数列的方法实例

    本文地址: http://www.cppcns.com/jiaoben/python/326151.html

    展开全文
  • 斐波那契数列计算 Python编程

    万次阅读 2018-06-29 22:11:23
    编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波那契数列元素 调用上述函数,完成如下功能: 用户输入一个整数n,输出所有不超过n的斐波那契数列元素、输出数列的元素和及平均数, 输出按照...
  • 对于学习编程语言的小伙伴们来说,斐波那契数列将是一个最经典的函数之一,今天用Python来给大家讲讲这个经典的函数怎么简单粗暴的实现。实现之前呢,先给大家介绍一下斐波那契数列的原理,原题是一个兔子繁殖问题,...
  • 未完待续~ ...1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765……(1)fibonacci数列即斐波那契数列,它的特点是前面两个数的和等于后面的一个数,fib(0)=fib(1)=1.(2)斐波那契...
  • 斐波那契数列 概念 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3...
  • 问题一:斐波那契数列满足这样的规律1,1,2,3,5,8,13,21……,用Python编程求出斐波那契数列的第多少项,开始大于2020。(用函数求解) 通过观察,第n项(设为f(n))满足以下条件: f(1)=1 f(2)=2 f(n)=f...
  • Python语言是一种b欸广泛使用的高级通用的脚本编程语言。语法简介,实现相同功能,Python语言的代码行数于其他语言的10分之nsh到5分之1。 下面是根据斐波那契定义,输出一个不大于1000的序列元素,Python代码的确少...
  • 更长的回答:这是一个在新手可能常见的失误:python中的or运算符可能和你想的不太一样。先看下面的例子:为什么 a == 1 or 2 这个表达式总是返回2?实际上,从第5式可以看出来,由于判断相等的运算符优先级比or...
  • 1.用python一行代码打印九九乘法表,代码如下: print('\n'.join([' '.join(["%2s x%2s = %2s" % (j, i, i*j) for j in range(1, i+1)]) ...2. 一行代码输出斐波那契数列: print([x[0] for x in [(a[i][0], a.app...
  • 介绍斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*) 。1. 元组实现fibs =...
  • 对于学习编程语言的小伙伴们来说,斐波那契数列将是一个最经典的函数之一,今天用Python来给大家讲讲这个经典的函数怎么简单粗暴的实现。实现之前呢,先给大家介绍一下斐波那契数列的原理,原题是一...
  • 题目:斐波那契数列。程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。在数学上,费波那契数列是以递归的方法来定义:F0=0(n=0)F1=1(n=1)...
  • 题目1已知一个数列:1、1、2、3、5、8、13、……,其规律为从第3项开始,每一项都等于其前两项的和,这个数列就是斐波那契数列。请求出符合斐波那契数列规律的第11项。代码实现--非递归def fib_show(n):a, b = 0, 1...
  • 斐波那契数列在公元前的印度就已经被提出,在欧洲由公元十二世纪的意大利数学家莱昂纳多·斐波那契以兔子繁殖为例子引入,因此又称为“兔子数列”。假如兔子在出生两个月后就有繁殖能力,一对兔子每个月能生出一对...
  • Python开发除了熟悉语言本身之外,还需要掌握很多相关联的技能,好比打NBA,你不光要学如何投篮,还要练习力量、技战术等一整套东西。所以,一个普通Python Web 开发工程师需要掌握的技能包括至少一个Web框架。...
  • 1.斐波那契数列 题目: 斐波那契数列:1, 2, 3, 5, 8, 13, 21.....根据这样的规律,编程求出400万以内最大的斐波那契数,并求出他是第几个斐波那契数 解题思路: 首先要得到前两项,从第三项开始,每一项都为前两项...
  • 对于学习编程语言的小伙伴们来说,斐波那契数列将是一个最经典的函数之一,今天用Python来给大家讲讲这个经典的函数怎么简单粗暴的实现。实现之前呢,先给大家介绍一下斐波那契数列的原理,原题是一...
  • 对于学习编程语言的小伙伴们来说,斐波那契数列将是一个最经典的函数之一,今天用Python来给大家讲讲这个经典的函数怎么简单粗暴的实现。实现之前呢,先给大家介绍一下斐波那契数列的原理,原题是一...
  • python编程练习-斐波那契数列

    千次阅读 2020-05-30 18:00:11
    斐波那契数列 生成斐波那契数列的前20个数。 说明:斐波那契数列(Fibonacci sequence),又称黄金分割数列,是意大利数学家莱昂纳多·斐波那契(Leonardoda Fibonacci) 在《计算之书》中提出一个在理想假设条件下...
  • Python编程斐波那契数列

    千次阅读 2019-03-22 08:48:05
    斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。 在数学上,费波那契数列是以递归的方法来定义: F0 = 0 (n=0) F1 = 1 (n=1) Fn = F[n-1]+...
  • 斐波那契数列在公元前的印度就已经被提出,在欧洲由公元十二世纪的意大利数学家莱昂纳多·斐波那契以兔子繁殖为例子引入,因此又称为“兔子数列”。假如兔子在出生两个月后就有繁殖能力,一对兔子每个月能生出一对...
  • Python斐波那契数列

    2017-07-20 00:34:44
    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n # -*- coding:utf-8 -*- ''' 斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契...
  • C语言实现斐波那契数列(非递归)的实例讲解废话不多说,直接上代码#include #include void f(int n);int main(void){f(10);return 0;}void f(int n){if(n==1){printf("1\n");return;}if(n==2){printf("1 1\n");return...
  • 斐波那契数列(Fibonacci sequence),又称黄金分割数列、 因数学家列昂纳多·斐波那契(Leonardoda Fibonacci) 以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: 1、1、2、3、5、8、13、21、34、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 401
精华内容 160
关键字:

斐波那契数列编程python

python 订阅