-
2021-07-23 17:28:31
#define _CRT_SECURE_NO_WARNINGS 1
#include<malloc.h> //动态内存分配.h文件
#include<stdio.h>
int fun1(int n) //函数 计算斐波那契数列
{
if (n <= 2)return 1;
else
return fun1(n - 1) + fun1(n - 2);
}
int fun(int n)
{
int a = 1;
int b= 1;
int c= 1;
while (n > 2) //while循环,计算斐波那契,可省去递归的多余计算
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}int main() //函数返回计算斐波那契
{
int n = 0;
scanf("%d", &n);
printf("n is:%d\n", fun(n));
return 0;
}
更多相关内容 -
C语言数据结构递归之斐波那契数列
2021-05-20 09:09:52C语言数据结构递归之斐波那契数列因为自己对递归还是不太熟练,于是做POJ1753的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归。然后就打算先做另一道递归的题(从数组...C语言数据结构递归之斐波那契数列
因为自己对递归还是不太熟练,于是做POJ1753的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归。然后就打算先做另一道递归的题(从数组中取出n个元素的组合),但是同样在递归的问题上不太理解。好吧,于是复习CPP,在第229页的时候,看到了斐波那契数列,回想起之前做过的一道题目,发现可以用递归的方法来做。于是决定优化一下之前的代码。
以下这段摘自《C primer plus》
斐波那契数列的定义如下:第一个和第二个数字都是1,而后续的每个数字是其前两个数字之和,例如,数列中前几个数字是1,1,2,3,5,8和13。…下面我们创建一个函数,它接受一个正整数n作为参数,返回相应的斐波那契数值。
首先,关于递归深度,递归提供了一个简单的定义。如果调用Fibonacci(),当n为1或2时Fibonacci(n)应返回1;对于其他数值应返回Fibonacci(n-1)+Fibonacci(n-2);
long Fibonacci(n)
{
if (n > 2)
return Fibonacci(n-1)+Fibonacci(n-2);
else
return 1;
}
然后是兔子总数问题。
有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后又生一对兔子,假如兔子都不死,每个月兔子对数为多少?
思考这道题的时候,如果你简单的推算一下,会发现兔子每个月的对数就是斐波那契数列。
第一个月:1对;
第二个月:1对;
第三个月:2对;
第四个月:3对:
第五个月:5对:
第六个月:8对;
……
我之前做这道题的时候,觉得思路很简单,就是从第三个月起,求每个月的兔子数时,只要把这个月的前两个月总数相加。
这是我之前的代码,用f1和f2表示月。:
#include
int main()
{
int f1,f2;
int month,ct;
printf("请输入月份:");
scanf("%d",&month);
if(month<=2)
printf("两只。\n");
if (month > 2)
{
f1 = f2 = 1;
ct = 0;
while(ct < month -2){
f1 = f1+f2;
ct += 1;
f2 = f1+f2;
ct += 1;
}
if (month %2 == 0){
printf("第 %d 个月的兔子对数为:%d.\n",month,f2);
}
if (month %2 == 1){
printf("第 %d 个月的兔子对数为:%d.\n",month,f1);
}
}
return 0;
}
其实这个代码离递归就差一步,很接近了。但是我当时完全没有想到。
这是我重新修改之后的代码:
#include
long Fibonacci(n)
{
if (n > 2)
return Fibonacci(n-1)+Fibonacci(n-2);
else
return 1;
}
int main()
{
long num;
int month;
printf("请输入月份:");
scanf("%d",&month);
num = Fibonacci(month);
printf("这个月的兔子对数为%d.\n",num);
return 0;
}
只是很简单的修改,但是代码就整洁易懂了很多,也学到了新内容。
工欲善其事必先利其器,共勉。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
-
Python3基础 while 斐波那契数列
2021-02-04 03:41:25code """ @Author : 行初心 @Date : 18-9-24 @Blog : www.cnblogs.com/xingchuxin @GitHub : github.com/GratefulHeartCoder """ def f(n): n1 = 1 n2 = 1 n3 = 1 if n (‘输入有误‘) return -1 while (n - 2) > 0...?
python : 3.7.0
OS : Ubuntu 18.04.1 LTS
IDE : PyCharm 2018.2.4
conda : 4.5.11
type setting : Markdown
?
code
"""
@Author : 行初心
@Date : 18-9-24
@Blog : www.cnblogs.com/xingchuxin
@GitHub : github.com/GratefulHeartCoder
"""
def f(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print(‘输入有误‘)
return -1
while (n - 2) > 0:
n3 = n2 + n1
n1 = n2
n2 = n3
n = n - 1
return n3
def main():
res = f(98)
print(res)
if __name__ == ‘__main__‘:
main()
?
result
/home/coder/anaconda3/envs/py37/bin/python /home/coder/PycharmProjects/basic/demo.py
135301852344706746049
Process finished with exit code 0
?
resource
[文档] https://docs.python.org/3/
[规范] https://www.python.org/dev/peps/pep-0008/
[规范] https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules/
[源码] https://www.python.org/downloads/source/
[ PEP ] https://www.python.org/dev/peps/
[平台] https://www.cnblogs.com/
?
Python具有开源、跨平台、解释型、交互式等特性,值得学习。 Python的设计哲学:优雅,明确,简单。提倡用一种方法,最好是只有一种方法来做一件事。 代码的书写要遵守规范,这样有助于沟通和理解。 每种语言都有独特的思想,初学者需要转变思维、踏实践行、坚持积累。
-
python实现斐波那契数列 用while循环实现求第N个菲波那切数列
2019-03-07 10:51:12 -
JavaSE习题------使用while循环实现斐波那契数列
2020-04-20 14:46:20使用循环完成30位的斐波那契数列 1 1 2 3 5 8 11 19… 方法1: class Demo{ public static void main (String[] args){ // 斐波那契的第一个值 int num1 = 1; // 斐波那契的第二个值 int num2 = 1; int ... -
Python使用while循环输出斐波那契数列(Fibonacci)
2020-11-24 09:11:04斐波那契数列又称费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数、斐波那契数列、费氏数列、黄金分割数列。在西方,首先研究这个数列的是比萨的列奥那多(意大利人斐波那契Leonardo ... -
C语言不用递归(使用栈)实现斐波那契数列练习
2021-05-20 09:09:53} main函数: Fibonacci.C #include "Stack.h" #include int main(){ long result=0; long num; num=50; Stack S; S.base=0; S.top=0; S.stackSize=0; InitStack(&S); for(int i=num;i>0;i--){ Push(&S,i); } long ... -
斐波那契数列的算法实现 —— python
2021-02-05 16:45:25斐波那契数列,简单地说,起始两项为0和1,此后的项分别为它...) 实现方式一:根据这一特性,可采用最简单的方法计算该项,循环计算每项的值,以下为python实现代码,输出该数列的前num项# -*- coding:utf-8 -*-def ... -
C语言实现斐波那契数列(非递归)的实例讲解
2020-12-31 02:34:25废话不多说,直接上代码 #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);... i -
c语言:斐波那契1.递归思想2.while循环
2020-03-12 01:56:17斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、... -
LabVIEW的While循环
2021-01-19 23:04:53While循环位于结构子选板“编程→结构→While循环”,同时也存在于选板“Express→执行过程控制→While循环”,如图1所示。结构子选板中的While循环和执行过程控制子选板中的While循环用法和作用是相同的,只不过在... -
Labview实现递归:斐波那契数列
2020-10-23 15:44:07斐波那契数列: 在数学上它以递归的方式进行定义,指这样的一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144……,即前两个数为分别为0和1,从第3项开始,每项的值都等于其前两项之和。斐波那契数列Fib(n)用... -
C语言学习历程(四)三种循环语句编写斐波那契数列
2017-11-19 22:33:42今天利用三种不同循环语句来编写100以内的斐波那契数列 首先利用for循环语句 #include int main() { int a[100]={1,2}; int i; printf("%d",a[0]); for(i=2;a[i-1];i++) { } } -
[MATLAB]使用while循环来寻求斐波那契(Fibonacci)数列中第一个大于10000的元素
2019-05-07 19:40:35问题描述:斐波那契数列是这样一个数列:1、1、2、3、5、8、13、21…第n个数是第(n-1)个数和第(n-2)个数的和; f=[1 1]; k=1; while f(k)<10000 f(k+2)=f(k)+f(k+1); k=k+1; end k f(k) k = 21 ans = ... -
C语言实现《剑指offer》——09_斐波那契数列(循环实现,效率远高于递归)
2019-04-22 19:45:48本篇是第9题_斐波那契数列的C语言实现: 题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 用递归方法实现的代码量很小,但是时间复杂度是O(n^2),本文采用循环实现,时间... -
python 递归\for循环_斐波那契数列
2020-11-29 12:56:57Python3基础 用 while循环实现 斐波那契数列 镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ... ... -
用while循环打印出斐波那契数列100以内的和。
2020-03-21 17:32:33var i = 1; var j = 1; var sum = i + j; while (i < 100) { var s = i + j; i = j; j = s; sum += s; } console.log(sum); -
Python中斐波那契数列的四种写法
2020-12-10 20:24:26在这些时候,我可以附和着笑,项目经理是决不...斐波那契数列用Python怎样写的?”我想,小白一样的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,“不能写罢?……我教给你,记着!这些... -
斐波那契数列三种循环语句程序表示
2017-11-23 13:24:26while(a[i-1]+a[i-2])) { a[i]=a[i-1]+a[i-2]; printf("%d\t",a[i]); i++; } } 3. #include int main() { int i=2; int a[100]; a[0]=1,a[1]=2; ... -
循环结构 (斐波那契数列)
2021-01-07 16:40:31循环结构 while循环 while ( 循环条件 ) { 循环操作 } do while循环 do { 循环操作 } while ( 循环条件 );...while循环和do-while循环的区别 ...while循环一次都不会执行 do-while循环不管任何情况...斐波那契数列 (兔子 -
C++输出斐波那契数列的两种实现方法
2021-05-23 05:15:11定义:斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...这个数列从第三项开始,每一项都等于前两项之和。以输出斐波那契数列的前20项为例:方法一:比较标准的做法,是借助第三... -
Python使用循环和递归实现斐波那契数列
2021-07-17 19:27:02基于Python实现斐波那契数列。 方法一:使用循环,通过yield生成器返回结果,使用时通过list转换为列表。这种方法效率更高,占用空间较小; 方法二:使用递归实现,效率很低,占用内存较高。 n=40时,方法一耗时... -
51nod1195斐波那契数列的循环节
2016-12-23 10:37:21求 Fib 数模 n 的循环节: 1. 对 n 做因数分解: n=p1^e1 * p2^e2 * … * pt^et; 2. 求出每个素数 pi 对应 Fib 数模 pi 的循环节mi0 ,则 pi^ei 对应的 Fib 数模 pi^ei 的 循环节 mi=mi0 * pi^(ei-1); 3. Fib ... -
C语言旅途之用for循环求斐波那契数列问题
2020-01-05 00:12:15Ⅰ、用for循环求斐波那契数列问题: ①、//代码摘下直接可以运行 //斐波那契数列问题 #include<stdio.h> int main() { int t,s,a1,a2,n; s=0;a1=1;a2=1; printf(“Please input the n of Fibonacci!\n”); ... -
C语言_循环(斐波那契数列):计算斐波那契数列,直到某项大于1000终止,输出该项的值。
2020-09-01 16:24:25/* 题目(斐波那契数列):计算斐波那契数列,直到某项大于1000终止,输出该项的值。 f1 = 1, f2 = 1, f3 = 2, f4 = 3... , fn = fn-1 + fn-2 规律:1 1 2 3 5 8 13,即前两项相加的和等于第三项*/ # include <... -
循环方式求解斐波那契数列
2021-04-20 10:44:23斐波那契数列(Fibonacci sequence)是1、1、2、3、5、8、13、21、34、55... 对于斐波那契数列的第n项求解,通常是使用递归方式实现,如下 public static int fbNum(int n) { if (n==1 || n==2) return 1; ... -
K阶斐波那契数列(循环队列)
2018-06-20 12:04:05K阶斐波那契数列(循环队列)#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 200typedef struct SeqQueue{ int q[MAXN]; int front; int ... -
【算法】java利用循环和递归实现斐波那契数列
2022-03-03 23:40:09斐波那契数列样例:1,1,2,3,5,8…… 特征:第一个和第二个数值都为1,从第三个数值起,每个数值的计算规律都是当前数值的上一个数值+上两个数值。例如上面例子中的第三个数值为2=1+1,第四个数值为3=2+1,第五个... -
python3基础while斐波纳契数列。
2018-01-31 10:36:44# Fibonacci series: 斐波纳契数列 # 两个元素的总和确定了下一个数 a, b = 0, 1 while b 10: print(b) a, b = b, a+b 执行以上程序,输出结果为: 1 1 2 3 5 8 这个例子介绍了几个新特征。 第一行包含... -
斐波那契数列(各种代码实现斐波那契数列)
2022-04-09 15:59:11斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、...