精华内容
下载资源
问答
  • 递归函数定义:如果一个函数在内部调自身,这个函数就是递归函数,递归函数的优点在于其定义简单,逻辑清晰明了,递归函数和for循环的作用效果有异曲同工之妙,for循环可以用递归来解决,但是for循环的逻辑关系没有...

    递归函数定义:如果一个函数在内部调自身,这个函数就是递归函数,递归函数的优点在于其定义简单,逻辑清晰明了,递归函数和for循环的作用效果有异曲同工之妙,for循环可以用递归来解决,但是for循环的逻辑关系没有递归清晰。

    问题描述

    (1)斐波那契数列(斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……前两项相加等于第三项。

    (2)求1+2!+3!+ …… +20!的和

    解决方案

    针对问题(1)斐波那契数列上一期主要是运用def函数for循环解决,本期将用递归函数解决,针对问题(2)阶乘也用递归函数。

    (1)斐波那契数列:

    def fei(n,a,b):

    if n==1:

    return 0

    elif n==2:

    return 1

    return fei(n-1,b,a+b)

    print(10,0,1)

    (2)阶乘算法:

    def row(n,sums):

    if n==21:

    return sums

    s=1

    for i in range(1,n+1):

    s=s*i

    return row(n+1,sums+s)

    print(low(1,0))

    递归最主要的特点在于return回去的函数值就是套用本身的函数,就相当于一层一层的包容下去,如此循环下去得到最终结果。

    展开全文
  • Fibonacci数列递归的实现 先来一个fibonacci数列定义: Fibonacci数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在...Fibonacci数列在程序中的实现还是很容易,他是一个典型的可以用递归现实的...

    Fibonacci数列递归的实现

    • 先来一个fibonacci数列的定义:
      Fibonacci数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N* 。
      Fibonacci数列在程序中的实现还是很容易,他是一个典型的可以用递归现实的算法。
    • 我们先来一个普通的递归写法:
    int fibo(int n)
    {
            if(n == 1 || n == 2)
                    return 1;
            return fibo(n-1)+fibo(n-2);
    
    }
    int main()
    {
            int n,result;
            printf("请输入:");
            scanf("%d",&n);
            result = fibo(n);
            printf("%d\n",result);
    }
    
    

    递归代码简洁,但是如果不做一定的优化,很容易出现栈溢出。以上的实现就会非常耗费内存,因为当n>2时,fibo函数需要调用自身n-2次才开始有返回值,然后开逐个返回原函数并开始计算。如果要求的n值非常大的话,可能需要同时保存成千上百个调用记录,很容易发生"栈溢出"错误(stack overflow)。

    • 但是我们可以对以上实现做一个小优化-尾递归
      尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
      一般来说,由于只存在一个调用记录,所以永远不会发生"栈溢出"错误。
      优化后的递归函数:
    int fibo(int n,int i,int j)
    {
            if(n ==1 || n ==2)
                    return j;
            return fibo(n-1,j,j+i);
    }
    
    int main()
    {
            int n,result;
            printf("请输入:");
            scanf("%d",&n);
            result = fibo(n,1,1);
            printf("%d\n",result);
    }
    
    

    这样一来,当fibo函数调用自身,就开始有return值,在递归结束后不用再把return值逐个返回原函数。尾递归的实现方式,编译器可以帮我们节省大量的内存消耗,妈妈再也不用我的栈溢出了!

    展开全文
  • 好吧,于是复习CPP,在第229页的时候,看到了斐波那契数列,回想起之前做过的一道题目,发现可以用递归的方法来做。于是决定优化一下之前的代码。 以下这段摘自《C primer plus》 斐波那契数列定义如下:第一个...
  • python中定义函数功能的重要作用:将复杂的计算过程封装为一个函数存储起来,就可以避免写重复的代码。...直接或间接调用sum()函数自身:python实现如下:In[1]def Out[2]:38斐波那契数列简介:...

    python中定义函数功能的重要作用:

    将复杂的计算过程封装为一个函数存储起来,就可以避免写重复的代码。再次需要该计算的时候只需调用即可。

    一,递归方法:


    递归方法为:将问题一步步分解,直到得到可以解决的简单问题。

    通常涉及直接或间接条用自身:

    例如计算列表(1,3,5,7,9,13)中各元素的和。


    10595dfc9b3aa89a16bcd8102ee4077d.gif

    直接或间接调用sum()函数自身:

    python实现如下:

    In[1]

    def 

    Out[2]:

    38

    斐波那契数列简介:


    斐波那契数列是最常见的一道面试题,又称‘兔子数列/黄金分割数列’。

    特性一:

    任一个数都是前两个数之和。

    例如:

    d2ada00e2766d1d9aa1cb096c5cac2b0.gif

    因此第一种计算斐波那契数列的方法,即让数字序列的最后两个元素相加,得到新的数字并插入数列结尾。

    特性二:

    在极限条件下,相邻两个元素的商等于一个常数。即


    1894ba379cdb2105ac70b97abc26626c.gif

    第一种:

    因此我们可以通过设置一个数组。

    a = [0,1]

    下一个要插入的数据就为“a【-1】+a【-2】”。

    a

    继续循环。循环y次就得到了y个新数字。

    最后所得到的斐波那契数列中数字的个数为 n = y + 2 。

    可以根据用户想要的斐波那契数字的个数n来定义循环次数y。

    y = n - 2

    输入【1】:

    def 

    输入【2】:

    fibs1

    输出【2】:

    [

    第二种:

    提前定义好数组中元素的个数,再依次设定每个值为前两个数的和。

    输入【1】:

    def 

    输入【2】:

    fibs2

    输出【2】:

    [

    两种方法运行时间对比:

    输入【1】:

    %

    输出【1】:

    26.2 


    展开全文
  • 斐波那契数列想必大家都不陌生,使用递归便可以实现它的算法,但是你是否有想过递归函数的时间复杂多少呢?今天我们就来看一下关于递归的那些事。 斐波那契数列 Fn 定义如下 F0=0, Fl=1, Fn=Fn-1+Fn-2, n=2,3… 请...

    斐波那契数列想必大家都不陌生,使用递归便可以实现它的算法,但是你是否有想过递归函数的时间复杂多少呢?今天我们就来看一下关于递归的那些事。
    斐波那契数列 Fn 定义如下
    F0=0, Fl=1, Fn=Fn-1+Fn-2, n=2,3…
    请就此斐波那契数列,回答下列问题。
    (1) 在递归计算 Fn 的时候,需要对较小的 Fn-1,Fn-2,…, Fl, F0 精确计算多少次?
    (2) 如果用大 O 表示法,试给出递归计算 Fn 时递归函数的时间复杂度是多少?
    我们一个一个的来解决:

    • [1] 第一问可能会是很多人无从下手,别急我们可以先实例化,从少的数列发现规律,加入我们是计算F5,则有:F5=F4+F3,F4=F3+F2,F3=F1+F2,F2=F1+F0.这时我们来计算F1,F0精确计算了多少次,为了方便计算,我们画图来表示:
      在这里插入图片描述

    • 解决了第一问,那么第二问就很好解决了,我们已经计算出了递归次数为2^n-1
      那么递归的时间复杂度为O(f(n))=O(2^n-1)
      就是O(2^n).
      你学会了吗??

    展开全文
  • 关于递归算法,可以参考这篇文章 汉诺塔 经典递归算法 in python Fibonacci数列为:0、1、1、2、3、5、8、13、21...... ...用递归的方法来定义: F(0) = 0 F(1) = 1F(n) = F(n-1) + F(n-2) , n>=2
  • 我看在家修炼编程技术是不错的选择,「Python实现斐波那契数列」是我们在知识星球中每周给大家安排的一道题,你也可以先思考一下有哪些实现方法,说不定哪天面试就能派上用场,终有一日当上CTO...
  • 数学公式定义斐波那契数列可以看成如下形式: F0=0 F1=1 Fn=Fn-1+Fn-2 约定Fn表示斐波那契数列的第n项, 输入包括一行,包括一个数字N(0≤N≤50)。 输出包括一行,包括一个数字,为斐波那契数列的第N...
  • 斐波那契数列递归定义的,这里就涉及到匿名函数如何调用自身的问题。基于定义,可以直接想到以下最直观的写法:fib = lambda n: 1 if n <= 1 else fib(n-1) + fib(n-2)其他答主也提到,这个实现的时间复杂度会...
  • 思路:可以用两种方法实现,这里递归的办法因为有太多重复的计算会超时(计算n=39,需要4s左右,题目要求1s),遂改用循环语句写(经测试n=39时,完全小于1s),下面的代码中也给出了c++中计算时间的办法之一,供...
  • 【递归函数】用递归函数求斐波那契数列第N项值(一)题目描述输入输出样例输入样例输出分析代码实现 题目描述 已知斐波那契数列为1,1,2,3,5,8,13,7……,第一、第二项值为1,1,从第3项起,每项的值都等于前2...
  • 若一个对象部分地包含它自己, 或它自己给自己定义, 则称这个对象是递归的;若一个过程直接地或间接地调用自己, 则称这个过程是递归的过程。 二、递归的分类 知道了递归定义,我们再说一下递归的分类,递归分为...
  • 编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联...求数列第n项可以用递归函数,只有当n1和n2时函数结束;其他情况一直调用他本身。 代码: #include <st
  • 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项...那么可以用递归的方式实现。 import java.util.Scanner; public class fibonacci { public static void main(String[...
  • 20200524_斐波那契数列

    2020-05-24 09:09:14
    递归可以实现斐波那契数列。 一、相关术语 斐波那契数列 英文【Fibonacci sequence】,又称黄金分割数列,由数学家【列昂纳多·斐波那契】设计。数学定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)。 举例:1 1 ...
  • 斐波那契数列定义递推地方式的方法可以得方式得出如下结论: 所以要求第n项的值变成了求矩阵与矩阵的相乘,还有矩阵的n次幂的求法。 求一个数或矩阵数的n次幂的O(logn)复杂度的求法: 整数...
  • 斐波那契数列

    2015-08-20 14:43:32
    从上面递归树结构可以看出其有重叠情况,故编程之美提出可以用一个存储变量来存储其计算过的值来排除解决重复的计算的问题,其时间复杂度为O(N),空间复杂度也为 O(N)。 第二种解法: 根据线性递推数列定义:具有...
  • 其实就是一个斐波那契数列 代码的话 1:可以一开始定义一个数组,把每个月的兔子数都存进去,最后然后通过索引输出n个值。 2:也可以每次输入一个月份后,两个变量(三个也行)从头迭代到该月份,然后输出
  • 大数斐波那契数列c++实现

    千次阅读 2019-09-07 13:01:01
    斐波那契数列定义如下:定义一组数的第一个为1,第二个为1,之后的每个数都是前两个数之和,将这样的一组数称为斐波那契数。斐波那契数的前十个数是:1,1,2,3,5,8,13,21,34,55。 它是面试中高频出现的一...
  • 若一个对象部分的包含自己或它自己给自己定义,那么我们说这个对象是递归的;若一个过程直接或间接的调用自己,那么这个过程是递归的。 递归的思想是把问题分解为规模更小具有与原问题相同解法的子问题,因此...
  • 题目  写一个函数,输入 n,求... 一般来说,能够用递归实现的程序也可以用循环实现,但较之循环法,递归程序虽然设计上更容易,但效率却受到很大影响。 代码实现一:递归法 1 #include <iostream&...
  • 斐波那契数列解决的几种方法

    千次阅读 2019-12-31 10:18:32
    文字来说,就是斐波那契数列可以以任何自然整数开始,之后的斐波那契数列系数就由之前的两数相加, F0=0,F1=1,这个序列 默认是从0 或者1 开始 几个月之前面试腾讯,其中有一道试题就和这个数列有关,...
  • 如何Java编写斐波那契数列

    千次阅读 2018-03-23 09:43:06
    无穷数列1,1,2,3,5,8,13,21,34,55,……,称为Fibonacci数列。它可以递归定义为: F(n)=1 n=0 F(n)=1 n=1 F(n)=F(n-1)+F(n-2) n&gt;1这是一个递归...
  • python中定义函数功能的重要作用:将复杂的计算过程封装为一个函数存储起来,就可以避免写重复的代码。再次需要该计算的时候只需调用即可。一,递归方法:递归方法为:将问题一步步分解,直到得到可以解决的简单问题...
  • 有人说,“普通程序员使用迭代,天才程序员使用递归“,真是这样吗? 1.浅谈递归与迭代 <1>递归的基本概念: 程序调用...递归的能力在于有限的语句来定义对象的无限集合. 使用递归要注意的有两点: ...
  • 斐波那契数列---兔子繁殖题

    万次阅读 2020-09-12 15:22:13
    斐波那契数列—兔子繁殖题 如果说兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。...我们可以用数学函数来定义: 找出了规律后,再利用递归,问题就迎刃而解了 代码如下: package
  • 斐波那契数列定义是F[N] = F[N-1] + F[N-2] F[0] =F[1] = 1 如果直接用递归的方法求解,画出递归树可得时间复杂度是O(2^n) 使用记忆话递归,即将已经计算出来的状态存下来,如果发现这个答案已经计算过,则不再...
  • 首先,斐波那契数列指的是这样一个数列:1、1、2、3、...虽说递归入门的时候都会做斐波那契数列,但是递归来算斐波那契数列真不是个好办法。 这里推荐大家可以直接for循环做,话不多说直接上代码: #O(n) def fi...
  • 斐波那契数列定义:每一项都是前两项的和。 自己思路: 1、脚趾头想都是递归,基本每个算法书讲递归的时候必然会举斐波那契的例子。但是这是面试题,应该不会这么简单,递归太耗时间了,考官应该会想节省时间的...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 124
精华内容 49
关键字:

斐波那契数列可以用递归定义