首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

那些年我们一起忘掉的C (三).斐波那契数列

它接收一个整型数,返回一个整型数作为结果 { int v; //定义一个整型变量存放结果 if(n==1 || n==2) v=1; //当n为1或2时,结果为1 else v=feb(n-1)...+feb(n-2); //其它情况下结果为前两个值之和(限于这个具体情景,没有考虑负值的情况,也没对负数进行检查) return v; //使用v值进行返回 //return ( n==1 || n...1:feb(n-1)+feb(n-2); //其实上面那么多可以使用这一条语句进行表达,st1?...如果作为下标,就在指示第3个到第20个元素 { n[i]=n[i-1]+n[i-2];//从第3个开始,后面每个元素值都是前两之和 sum+=n[i]; // 然后将结果顺便累加到sum中...思路 想获取斐波那契数列的前20项之和,可以先将这个数列进行构建,存储,然后遍历相加 也可以实现出一个斐波那契函数,进行遍历累加 基础知识点 函数的定义 函数的递归调用 数组的定义与赋值 原文地址http

37220

Python基础语法-函数-递归函数计算斐波那契数列

计算斐波那契数列# 计算斐波那契数列的第n项def fibonacci(n): if n n else: return fibonacci...(n-1) + fibonacci(n-2)在这个例子中,我们定义了一个名为fibonacci的递归函数,它接受一个整数n作为参数,并返回斐波那契数列的第n项。...函数的基本情况是当n小于等于1时,返回n。否则,函数通过递归调用自身,计算第n-1项和第n-2项的和,并返回给调用者。让我们来看看如何使用递归函数计算斐波那契数列的第10项。...>>> fibonacci(10)55函数首先检查n是否小于等于1,因为10不小于等于1,它将通过递归调用计算第9项和第8项的和,然后返回给调用者。这个过程将一直持续到计算出第1项和第0项。...当n等于0或1时,函数将直接返回0或1。此时,递归调用将在函数调用栈中从底部开始弹出,最终计算出斐波那契数列的第10项,也就是55。递归函数虽然功能强大,但也存在一些潜在的问题。

58720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    什么是递归函数?

    else { result = factorial(n-1) * n; //递推关系,这个数与上一个数之间的关系。...由此可以看出递归函数必须有结束条件。 斐波那契数列 斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, ··· 这个数列从第三项开始,每一项都等于前两项之和....ld项为: %ld\n", number, fibonacci( number ) ); } 应用题~~ 小明为了学好英语,需要每天记单词,第一天记1个,第二天记2个依次类推,请用代码完成,算出小明第...分析: 墙(结束条件)是“第一天记1个” 递推关系是“第n天记的单词= 第n-1天记的单词数量+n” #include /* 定义获取单词数量的函数 */ int getWordNumber...(n-1)+n ; //递推关系 } } int main() { int num = getWordNumber(10); //获取会了的单词数量 printf

    1.1K20

    那些年我们一起忘掉的C (十九).main函数传参

    1:10*mi(n-1); //反馈10的n-1次方作为权值 } int checkarg(int n,char *parg[]) //定义一个检查参数的函数,用来确认main函数获取到的参数的合法性.../遍历所有参数并且打印,这一步是不是必要的,只是为了进行回显确认,注意,程序名也算参数中的一个,是第0号参数 for(i=n-1;i>0;i--) //整型变量i赋初值n-1,在[n-1,1]的范围里...n-1,在[n-1,1]的范围里,逐一自减进行遍历,在数组中对应第二个参数到最后一个参数 { for(len=strlen(parg[i]),p=parg[i];*p !...它程序接收的其实是字符串,而非数值,这个从字符串到数值的转换需要我在代码中完成 { int sum=0; if (checkarg(argc,argv) ==0 ) return 0; //调用checkarg对参数进行检查...sum=addarg(argc,argv); //调用addarg进行计算 printf("\nthe sum is: %d\n",sum); return sum; } 思路 首先检查传进来的参数是否合法

    53630

    C语言进阶指南(6)(函数递归详解)(内含汉诺比塔,青蛙跳台阶问题)

    我们以上面的方法为参考,可以构思出来n!的通项为n*(n-1)!。0!...例如我们编写一个程序,实现的效果是用户输入一个整数,屏幕上能按照顺序将每个数字一次打印:比如用户输入1234,屏幕上的打印结果为:1 2 3 4.。...我们发现递归fib(50)需要调用2的50次方次函数才能得到返回值青蛙跳台阶青蛙跳台阶的问题如下:有一个青蛙,它一次能跳两个台阶,也可以跳一次台阶,那么当青蛙跳到第n个台阶时,总共有几种跳法。...我们假设青蛙离第n个台阶上还差一步,那么青蛙就有可能在第n-1的台阶或者n-2的台阶上。...汉诺比塔问题想让盘子在最低端由大到小排序,我们需要先将第n个的盘子挪到c柱上,那么我们需要先将前边的(n-1)个盘子按由大到小的规律挪到b柱,接着把第n个盘子挪到c柱,再将(n-1)个盘子挪到c柱完成排序

    12710

    Perrin Numbers

    请注意,当且仅当 P(n, n) = 0 时,P(n) 才能被 n 整除 暴力破解(Brute-force) 第一个想法是采用上面的公式,并直接使用递归算法来实现它们。...实现这个方法很简单,用它来检查 n 的小值。 P(n) mod n 的值可以总结在一个表中,该表表明,对于较小的 n 值,没有合数 n 能整除 P(n)。...问题是当 n 开始变大时,这个(第一个)程序需要很长时间才能运行。为什么?...快速求幂算法(Fast Exponentiation Algorithm) 线性时间复杂度是否就是目前的极限呢,看起来要计算第n项我们必须要知道第n-2项,以此类推还需要知道第n-4项等等,线性时间看起来已经是最优的了...}P(n) \P(n-1) \P(n-2) \\end{pmatrix} 所以现在,为了计算第 n 个 Perrin 数,我们只需要将 3 × 3 矩阵求幂 而在求幂的计算过程中,我们也可以进行简化,例如我们要求偶数次幂

    35130

    C++经典算法题-PI算法

    解法 首先介绍J.Marchin的圆周率公式: PI = [16/5 - 16 / (3*53) + 16 / (5*55) - 16 / (7*57) + ......] - [4/239 - 4/...也就是说第n项,若为奇数则为正数,为偶数则为负数,而项数表示方式为: [16/52*n-1 - 4/2392*n-1] / (2*n-1) 如果我们要计算圆周率至10的负L次方,由于[16/52*n-1...- 4/2392*n-1]中16/52*n-1比4/2392*n-1来的大,具有决定性,所以表示至少必须计算至第n项: [16/52*n-1 ] / (2*n-1) = 10-L 将上面的等式取log...并经过化简,我们可以求得: n = L / (2log5) = L / 1.39794 所以若要求精确度至小数后L位数,则只要求至公式的第n项,其中n等于: n = [L/1.39794] + 1 在上式中...[]为高斯符号,也就是取至整数(不大于L/1.39794的整数);为了计简方便,可以在程式中使用下面这个公式来计简第n项: [W -1/52- V -1 / (2392)] / (2*n-1) 这个公式的演算法配合大数运算函式的演算法为

    83220

    SQL Server连接中三个常见的错误分析(转)

    首先,检查网络物理连接   ping   如果 ping 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等.   ...接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了 TCP/IP 协议等等,可以利用 SQL Server 自带的服务器网络使用工具来进行检查.   ...接下来我们要到客户端检查客户端的网络配置   我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,   所不同的是这次是在客户端来运行这个工具.   ...点击:程序 Microsoft SQL Server 客户端网络使用工具   打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议.   ...一般而言,我们同样需要启用命名管道以及 TCP/IP 协议.   点击 TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致.

    1.6K20

    SQL Server 2000 连接中三个最常见错误原因分析

    首先,检查网络物理连接 ping 如果 ping 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等....接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了 TCP/IP 协议等等可以利用 SQL Server 自带的服务器网络使用工具来进行检查....接下来我们要到客户端检查客户端的网络配置 我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查,所不同的是这次是在客户端来运行这个工具....点击:程序 Microsoft SQL Server 客户端网络使用工具 打开该工具后,在"常规"项中,可以看到客户端启用了哪些协议. 一般而言,我们同样需要启用命名管道以及 TCP/IP 协议....点击 TCP/IP 协议,选择"属性",可以检查客户端默认连接端口的设置,该端口必须与服务器一致.

    2.4K00

    要理解递归,先得理解递归

    解出递归的要点在于求出n-1,求出了n-1才能求解出n,这是为什么呢? 2.递归的执行过程:     为了搞清楚递归的执行过程,我们配合实例来讲解。在求解阶乘n!...解出递归的要点在于求出n-1,求出了n-1才能求解出n,它思想其实和数学中的归纳本质上是相同的。大家现在是不是可以理解递归回退顺序是它调用顺序的逆序了呢?...        当n>0时,                     首先,将n-1个盘子从x借助z移动到y                     然后,将1个盘子从x移动到z                    ...从推到过程中我们可以发现:解出递归的要点在于求出n-1,求出了n-1才能求解出n。此外,从数学角度也可以归纳出0,1,3,7,15,63...表达式为:f(n)=2^n  - 1。...mid,然后将最大的盘子从x直接移动到z hanio(n-1,mid,src,dest);//将在中间y柱上的n-1个盘子借助x移动到z } } 4.总结和展望        文章开始简单的题目还可以用迭代来求解

    1.3K40

    【基础算法】递归算法

    斐波那契数列 斐波那契数列的规律是:第一项是1,第二项是1,以后每一项都等于前两项之和。我们的问题是:斐波那契数列的第n项是多少?...F(n)=\begin{cases} 1\quad n=1\\ 1\quad n=2\\ F(n-1)+F(n-2)\quad n\geq3 \end{cases} 在计算斐波那契数列的第n项F(n...)时,首先需要得到F(n-1)和F(n-2)的值,而F(n-1)和F(n-2)也可以通过这个公式计算,所以斐波那契数列具有递归特性,可以使用递归算法计算出数列第n项的值。...关键在于第1步和第3步如何执行。 这显然成为一个新的梵塔问题,只不过这个梵塔问题的规模要小一些,从N个盘子变成N-1个盘子: 将A针上的N-1个盘子借助C针移到B针上。...按照之前分析的步骤,先将A针上的N-1个圆盘借助C针移动到B针上,然后将A底部的圆盘移到C针上,最后将B针上的N-1个圆盘借助A针移动到C针上。

    37210

    算法学习:递归

    四、递归的注意事项 递归编程作为算法设计的一项基本技能,其有效运用依赖于对几个核心要素的深刻理解和谨慎操作。以下是递归实践中必须留意的关键点: 1....优化策略示例:使用记忆化(缓存) // 初始化一个Map用于存储已经计算过的斐波那契数,键为n,值为第n项斐波那契数 const memo = new Map(); // 定义一个使用记忆化的斐波那契函数...,将结果存入memo中,供后续可能的使用 memo.set(n, result); return result; } // 调用优化后的函数计算第30项斐波那契数,由于使用了记忆化技术...汉诺塔问题可以用递归算法来解决,基本思路是将n个盘子的问题分解为两个子问题:先将上面的n-1个盘子借助C杆移动到B杆,然后将最下面的盘子直接移动到C杆,最后将B杆上的n-1个盘子移动到C杆上。...首先处理较小规模的问题(即将n-1个盘子借助某一柱子移动),然后处理当前规模的特殊部分(即移动最底下的一个盘子),最后再解决剩余的较小规模问题(将n-1个盘子从辅助柱移动到目标柱)。

    10510

    蓄水池抽样

    重复上一个步骤 证明 为了证明这个解是完全有效的,我们必须证明0n的任何项流[i]在最终储层[]中的概率是k/n。让我们把证据分为两种情况,因为前k项的处理方式不同。...最后第二项在最终储层中的概率[]=[在流[n-2]的迭代中选取前k个索引之一的概率]X[在流[n-1]的迭代中选取的索引与在流[n-2]中选取的索引不同的概率]=[k/(n-1)]*[(n-1)/n]=...类似地,我们可以从流[n-1 ]到流[k]中考虑所有流项的其他项,并推广证明。...考虑流[n-1]=[k/(k+1)]x[(k+1)/(k+2)]x[(k+2)/(k+3)]x…x[(n-1)/n]=k/n 实现 仍然以leetcode中此题为例,随机获取一个链表中的一个节点值,注意...此时,需要遍历链表的前k个节点,将前k个节点的值存储在数组中,然后从第k + 1个节点开始遍历链表,从中获取值,代码如下: class Solution { public: Solution(ListNode

    82850

    备战蓝桥杯——递归(9个经典练习题)

    斐波那契数列的定义是 F(n)=F(n-1)+F(n-2)(n>1),且F(0)=0,F(1)=1 从这个定义可以看出,计算第个斐波那契数,依赖于第n-1和n-2个斐波那契数的计算,这是一个典型的递归定义...格外重要的是,这个解决问题的函数必须有明确的结束条件,否则就会导致无限递归的情况。 递归的三要素    在我们了解了递归的基本思想及其数学模型之后,我们如何才能写出一个漂亮的递归程序呢?...递归步骤return f(n - 1) + f(n - 2);体现了斐波那契数列从第三项起每一项等于前两项之和的规则,通过不断调用自身来获取第n - 1项和第n - 2项的值并相加,以此来计算第n项的值...递归步骤:对于第n阶楼梯,最后一步可能是从第n - 1阶爬 1 步上来的,也可能是从第n - 2阶爬 2 步上来的。...所以爬到第n阶楼梯的方法数等于爬到第n - 1阶楼梯的方法数加上爬到第n - 2阶楼梯的方法数。

    55310

    70 爬楼梯

    需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意: 给定 n 是一个正整数。...我们用迭代的方式推导: 每次要通过前两项记录新的值,再进行迭代直到最后是我们要的第n个。这里有个空间上的注意就是我们不必要记录整个斐波那契数列,只需要保留两个而已。...然后就是通项公式解,不用说了它最优,不过我们不可忽视的是平方根的复杂度O(logn)。...那么就是用已解决的问题得出我们的问题解也就是划分子问题,爬第n阶楼梯的方法数量,等于 2 部分之和(就是最后一次的) 爬上 n-1 阶楼梯的方法数量。...因为再爬一次2阶就能到第n阶 所以我们得到公式 dp[n] = dp[n-1] + dp[n-2] 同时需要初始化 dp[0]=1 dp[1]=2 时间复杂度:O(n) 代码二: public int

    72820

    【组合数学】组合恒等式 ( 变上项求和 1 组合恒等式 | 三种组合恒等式证明方法总结 | 证明变上项求和 1 组合恒等式 )

    在子集中必须含有 a_1 , 则只能从剩余的 n 个元素中选取 k 个 , 方案数是 \dbinom{n}{k} ; ( 2 ) 第 2 类 , 与 第 1 类不重叠 , 不含..., 即 n - 1 个 ) , 那么就要从 n-1 个元素中选取 k 个元素 , 最终结果是 \dbinom{n-1}{k} ( 3 ) 第 3 类 , 与 第 1,2 类不重叠..., 不含 a_1, a_2 , 但是必须含有 a_3 , 不含 a_1, a_2 那就要从 n-1 个元素中选取 ( 从 n+1 个元素中去掉 2 个 , 即 n-1...) , 必须含有 a_3 ( 从 n-1 个元素中再去掉一个, 即 n - 2 个 ) , 那么就要从 n-2 个元素中选取 k 个元素 , 最终结果是 \dbinom{n-...2}{k} \vdots ( 4 ) 第 n + 1 类 , 与 第 1,2, \cdots , n 类不重叠 , 不含 a_1, a_2 , a_3 , \cdots , a_n , 但是必须含有

    90000

    初学者指南:什么是算法?11行伪代码给你讲明白

    一个n个元素的数组A包含元素A[0],A[1],…,A[n-1]。 这可能令你吃惊,因为其首元素是第0个,而尾元素是第n-1个,可能你的预期是第1个和第n个。...这非常常见,当遍历一个大小为n的数组时,我们是从位置0遍历到位置n-1。 在我们的算法中,当我们说某个对象的取值是从数x到数y(假定x小于y)时,意思是从x到y(但不包含)的所有值,参见算法第2行。...我们假定无论i的值是什么,访问第i个元素都花费相同的时间。因此访问A[0]与访问A[n-1]需要相同的时间。这是数组的一个非常重要的特性:对元素的访问是一致的,都花费常量时间。...每次执行第2行代码时,就会推进循环到第1,2,…,n-1天。...我们能回退多远由条件i-k≥0决定:回退到索引i-k指示的这一天检查跨度是否结束,而索引不能为0,因为0对应第1天。 第6行检查跨度是否结束。如果跨度未结束,则在第7行增加其长度。

    1.6K21

    【组合数学】递推方程 ( 常系数线性齐次递推方程 | 常系数、线性、齐次 概念说明 | 常系数线性齐次递推方程公式解法 | 特征根 | 通解 | 特解 )

    - a_1H(n-1) - a_2H(n-2) - \cdots - a_kH(n-k) = 0 \\\\ H(0) = b_0 , H(1) = b_1 , H(2) = b_2 , \cdots...常系数概念 : 常系数指的是 T(n) , T(n-1) 这些 项之前的系数 , 都是常数 , 如 2 T(n-1) , T(n-1) 项前的系数是 常数 2 ; 之前栗子中介绍过的递推方程..., 如 汉诺塔递推方程 T(n) =2 T(n-1) + 1 插入排序递推方程 W(n) = W(n-1) + n-1 都是 常系数线性递推方程 , 不是齐次的 ; 2 ....线性概念 : 第 n 项是前面若干项 n-1 的 线性组合 , 没有指数等关系 , 因此成为线性 ; 3 ....齐次概念 : 在 T(n) 项之外没有其它元素 , 只有项 , 上述 T(n) =2 T(n-1) + 1 在项之外还有一个常数 1 , 该递推方程就不是齐次的 ; 如果改成 T(n) =

    59900
    领券