首页 > 其他分享 >斐波那契数列

斐波那契数列

时间:2023-11-01 20:33:07浏览次数:42  
标签:f1 f2 数列 int 斐波 那契

1. 什么是斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……

2. 递归表达式

F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

3. 代码

#include <stdio.h>
#include <stdlib.h>
int fib(int n)
{
if(n<=1)
{
    return 1;
}
else
{
    return fib(n-1)+fib(n-2);
}
}

int main()
{
int n,i;
long long result;
printf("Please input how many times you want the program to run\n");
scanf("%d",&n);
i=1;
while(i<=n)
{
    result=fib(i);
    printf("%lld ",result);
    i++;
}
return 0;
}

下面这部分程序是没有使用递归的

int main()
{
long long f1,f2,f3;
int n,i;

char c;

Restart:;

f1=1,f2=2;

printf("Please input how many times you want the program to run\n");
scanf("%d",&n);
if(n>=3)
{
    printf("%d %d ",f1,f2);
    for(i=1; i<=(n-2); i++)
    {
        f3=f1+f2;
        printf("%lld ",f3);
        f1=f2;
        f2=f3;
    }
}
else
{
    printf("Variable n must be not less than 2");
}

printf("\nRestart?(y/n)\n");
getchar();
scanf("%c",&c);
if(c=='y')
{
    goto Restart;
}

return 0;//我先写的这个,因为不知道什么叫递归,我以为就是循环结构,但是这个程序会有数据溢出,所以问了ai才搞懂什么是递归,应该用上面那个递归的
}

4. 运行结果截图

1. 10次

2. 100次

跑到这四五十次就已经跑不动了,一分多钟也就跑一半吧

查了一下递归算法的时间复杂度

那么循环算法的时间复杂度是O(n)?

5.调试查看堆栈情况

堆栈方面的知识学习参考了娄老师的博客

……cgdb出问题了?好像没有c语言i/oput的文件,在step调试中没法输入

修改一下代码,在固定次数下查看堆栈

没问题了

完成

标签:f1,f2,数列,int,斐波,那契
From: https://www.cnblogs.com/Kaifazhejun/p/17801228.html

相关文章

  • 38.外观数列(中等)
    目录题目法一、双指针法二、递归题目给定一个正整数n,输出外观数列的第n项。「外观数列」是一个整数序列,从数字1开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1)="1"countAndSay(n)是对countAndSay(n-1)......
  • python---数列内元素正倒相加实例
    a=list([1,21,5,3,1,23])b=list([7,4,6,3,2,1])x=int(input("请输入想从第几个数开始:"))y=int(input("请输入想到第几个数结束:"))c=[0,0,0,0,0,0]m=input("想要正着加吗?(T/F)")foriinrange(x-1,y):ifm=="T":c=a[i]+b[i]......
  • 斐波那契数列 (指针)
    //指针#include<bits/stdc++.h>usingnamespacestd;intsum(int*a){intb=*a-1,c=*a-2;if(*a<=2){return1;}else{returnsum(&b)+sum(&c);}}intmain(){intx,a;cin>>a;x=sum(&a);......
  • 斐波那契数列--按值--地址--指针
    //按值#include<bits/stdc++.h>usingnamespacestd;intsum(inta){ if(a<=2){ return1; }else{ returnsum(a-1)+sum(a-2); } }intmain(){ intx,c,d; cin>>c; x=sum(c); cout<<x; return0;}//地址#include<bits/stdc++.h&g......
  • 斐波那契数列(指针传递)
    #include<bits/stdc++.h>usingnamespacestd;intNUM(int*a){intb=*a-1;intc=*a-2;if(*a<=2)return1;elsereturnNUM(&b)+NUM(&c);}intmain(){intNUMx,NUMy;cin>>NUMx;cout<<N......
  • 斐波那契数列&数值传递
    #include<iostream>usingnamespacestd;intp1(inta){ if(a<=2){ return1; }else{ returnp1(a-1)+p1(a-2); }}intmain(){ intn; cin>>n; cout<<p1(n); return0;} #include<iostream>usingnamespacestd;int......
  • 斐波那契数列 (地址)
    //地址#include<bits/stdc++.h>usingnamespacestd;intsum(int&a){intb,c;b=a-1;c=a-2;if(a<=2){return1;}else{returnsum(b)+sum(c);}}intmain(){intx,a;cin>>a;x=sum(a);......
  • 算法笔记(6)数列分块
    原发表于我的博客前言分块不能说是一种数据结构,它是一种思想,无论是数列分块,块状链表,还是数论分块,莫队算法,都应用了分块的思想。本文主要介绍狭义上的分块,即数列分块。数列分块的引入数列分块可以说是暴力,一种优美的暴力,它的基本思路是,把数列分成若干块(一般取\(\sqrtn\)),分块......
  • 区间加等比数列
    https://www.luogu.com.cn/problem/U329489给出一个长度为n的数列接下来进行m次操作1lrkai=l~rA[i]+=k*a^(i-l)2lrkai=l~rsumA[i]*k*a^(i-l)最后输出一遍整个序列输出对998244353取模n,m<=1e5,5s操作分块+序列分块首先假设每B次操作......
  • 卡特兰数 Catalan 数列
    卡特兰数Catalan数列引入有一个无限大的栈,进栈的顺序为\(1,2,\cdots,n\),求有多少种不同的出栈序列。设\(h[n]\)为\(n\)个数的出栈序列方案数。可以这样想\(k\)是最后一个出栈的数,那么比\(k\)早进栈早出栈的有\(k-1\)个,方案数也就是\(h[k-1]\)。同理比\(k\)晚......