【递归】斐波那契数列第n个数

递归、递推计算斐波那契数列第n项的值:

 1 #include <stdio.h>
 2 long long fact(int n); //【递推】计算波那契数列第n个数
 3 long long fact2(int n);//【递归】
 4 int main(int argc, char *argv[])
 5 {
 6     int i=1;
 7     while(i<=10)
 8     {
 9         printf("%d %I64d %I64d\n",i,fact(i),fact2(i));
10         i++;
11     }
12     return 0;
13 }
14 long long fact(int n) //【递推】计算波那契数列第n个数
15 {
16     long long a,b,c;
17     a=1;
18     b=1;
19     if(n==1||n==2) return 1;
20     else if(n<1) return -1;
21     else
22     {
23         n=n-2;
24         while(n>0)
25         {
26             c=a+b;
27             a=b;
28             b=c;
29             n--;
30         }
31         return c;
32     }
33 }
34 long long fact2(int n)//【递归】
35 {
36     if(n<0) return -1;
37     else if(n==1||n==2) return 1;
38     else
39     {
40         return fact2(n-1)+fact2(n-2);
41     }
42 }

时间: 2024-10-10 03:47:20

【递归】斐波那契数列第n个数的相关文章

基础递归 - 斐波那契数列

[题目描述] 求斐波那契数列的第n项. [算法分析] 这篇博文主要面对新人学习,求dalao不打. 相信主函数那一块大家都会写,声明变量,输入变量,打印结果即可. 所以求值的函数就是我们深究的内容. 这图应该不必解释. 没有结束条件你就死循环了. 斐波那契数列函数的分析. [参考代码] #include <iostream> using namespace std; int fbnq(int); int main() { int n; cin>>n; cout<<fbn

两种方法递归斐波那契数列

__author__ = 'hechangting' #ecoding=utf-8 import itertools #迭代器 class Fib: def __init__(self): self.prev = 0 self.curr = 1 def __iter__(self): return self def __next__(self): value = self.curr self.curr += self.prev self.prev = value return value #生成

用for循环和递归调用写出1~N的斐波那契数列的和 和第N位的数

首先注意: 代码是从上往下,从左往右执行的!! 这是for循环写的 m=任意数.代表1~多少位的和 public class Fei_Bo_Na_Qi{    public static void main(String[] args){        int m = 30;  //这里代表1~30位的和        System.out.println( "斐波那契数列的第 "+m+" 位数为: "+m1(m) );//  在输出的时候调用函数    }   

递归总结及斐波那契数列的实现

优点:递归给某些编程问题提供了简单的方法 缺点:有缺陷的递归会很快耗尽计算机的资源,递归的程序难以理解和维护 杀毒软件会全盘扫描文件,其中就应用了递归 斐波那契数列的实现如下 #include<stdio.h> int fib(int n) { if(n == 1) return 1; if(n == 2) return 2; if(n > 2) //此行可省略 return fib(n - 1) + fib(n - 2); //返回第三个数 ,有返回值不能用void } int mai

用递归和迭代写斐波那契数列,前n列的和

首先注意: 方法不调用不执行,调用才执行,并且把值返回到方法的调用处!! public class Fei_Bo_Na_Qi{    public static void main(String[] args){        int m = 100;        System.out.println( "斐波那契数列的第 "+m+" 位数为: "+m1(m) );//  在输出的时候调用函数    }    public static int  m1(int i

斐波拉契数列的计算方法

面试题9.斐波拉契数列 题目: 输入整数n,求斐波拉契数列第n个数. 思路: 一.递归式算法: 利用f(n) = f(n-1) + f(n-2)的特性来进行递归,代码如下: 代码: long long Fib(unsigned int n) { if(n<=0) return 0; if(n==1) return 1; return Fib(n-1) + Fib(n-2); } 缺陷: 当n比较大时递归非常慢,因为递归过程中存在很多重复计算. 二.改进思路: 应该采用非递归算法,保存之前的计算结

斐波那契数列题型ACing

斐波那契数列 特点:头两项均为1,后面任一项都是其前两项之和. 程序在计算中需要用两个变量存储最近产生的两个序列值,且产生了新数据后,两个变量要更新. 问题1:输出斐波那契数列的前十项. int i,x1,x2,x; x1=1; //头两项都是1 x2=1; printf("%6d%6d",x1,x2); for(i=1;i<=8;i++){ //循环输出后8项 x=x1+x2; //计算新项 printf("%6d",x); x1=x2; //更新x1和x2

超级楼梯-斐波那契数列的运用

Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数. Output 对于每个测试实例,请输出不同走法的数量 Sample Input 2 2 3 Sample Output 1 2 每次有2种走法,并且要求最后还能干好到达M级.正着不行,逆向思维一下,要达到最后一级的前一级只能是M-

递归方法实现斐波那契数列C++

//递归方法实现,如下: #include "stdafx.h" #include <iostream> using namespace std; void F(int num) { int *p = new int[num],i; p[0] = 0; p[1] = 1; for (i = 2; i < num; i++) { p[i] = p[i - 1] + p[i - 2]; } cout << endl; cout << "输