C语言实现斐波那契数列(非递归)

#include <stdio.h>
#include <stdlib.h>

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");
        return;
    }
    printf("1 1 ");
    int* p=(int*)malloc(sizeof(int)*n);
    p[0]=1;
    p[1]=1;
    int i;
    for(i=2; i<n; i++)
    {
        p[i]=p[i-1]+p[i-2];
        printf("%d ", p[i]);
    }
    printf("\n");
    free(p);
    p=NULL;
}
时间: 2024-11-05 22:49:51

C语言实现斐波那契数列(非递归)的相关文章

【剑指offer】斐波那契数列非递归求解第N项

public class Solution {    public int Fibonacci(int n) {       //错误输入处理       if(n<0) return -1;       int pre = 1;       int result = 0;       for(int i=0; i<n; i++){           //计算第i项           result += pre;           //将pre往后更新一项           pre =

斐波那契数列高效递归求法

时间:2014.05.19 地点:图书馆 ------------------------------------------------------------------- 一.简述 前面给出了一种斐波那契数列解法的矩阵幂方法,这是最高效的方法,时间复杂度为O(log).正常来说通过递推公式 F(n)=F(n-1)+F(n-2)直接来计算F(n)效率是很差的,因为这里会涉及很多冗余计算,比如求F(5),我们要求[F(4)和F(3)],[要求F(4)则得求F(3)和F(2),要求F(3)得求F

一起talk C栗子吧(第四回:C语言实例--斐波那契数列)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C语言实例吧! 看官们,上一回中咱们说的是求阶乘的例子,这一回咱们说的例子是:斐波那契数列. 看官们,斐波那契数列是以数学家斐波那契数列的姓来命名的.斐波那契数列的定义:数列的第0项和第1项 为1,第n项为第n-1项和第n-2项的和.用数学公式表示出来就是:f(n)=f(n-1)+f(n-2),其中(n>1),f(n)=1;(n=0,1). 看官们,我在程序中使用了递归

用L脚本语言打印斐波那契数列

下面这个例子脚本可以打印斐波那契数列的前10个 #scp 定义:整数,num1,0 定义:整数,max,10 定义:整数,count,1 定义:函数,fib,index,fibnumber 如果:((index==1) || (index ==2)) fibnumber=1 否则 定义:整数,x,0 定义:整数,y,0 定义:整数,z1,0 定义:整数,z2,0 x=index-1 y=index-2 调用:函数,fib,x,z1 调用:函数,fib,y,z2 fibnumber=z1+z2 结

斐波拉契数列的递归、非递归、公式法多种方法实现

实现斐波拉契数列:1,1,2,3,5,8...,当n>=3时,f(n)=f(n-1)+f(n-2). 解:求解斐波拉契数列方法很多,这里提供了4种实现方法和代码,由于第5种数学公式方法代码太过繁琐,只做简单介绍 方法一:递归调用,每次递归的时候有大量重复计算,效率低,可将其调用的过程转化成一颗二叉树进行分析,二叉树的总结点个数不超过(2^n-1)个,由于其是不完全二叉树,那么函数计算的次数必小于(2^n-1),时间复杂度为O(2^n):递归调用的深度为n,空间复杂度为O(n) 方法二:非递归数组

【剑指offer】斐波那契数列(递归和非递归实现)

递归实现是最常想到的方法,代码如下: //递归方式 long Fibonacci(unsigned n) { if (n==0) { return 0; } else if (n==1) { return 1; } else { return Fibonacci(n-1)+Fibonacci(n-2); } } 显然递归并不是最好的方法,当n较大时效率将非常低下. 较好的思路是: 从下往上计算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)--依此类推就可以算出第n

关于斐波那契数列和递归

递归有三个基本点: 1.递归总有一个最简单的情况.即边界或者跳出递归的条件语句: 2.递归总是尝试解决一个规模更小的问题: 3.递归尝试解决的父问题和子问题之间不因该有交集: 以下是几个递归代码://斐波那契数列 import edu.princeton.cs.algs4.StdOut; public class No_1_1_19 { public static void main(String[] args) { for(int n=0;n<10;n++) { StdOut.println(

斐波那契数列和递归实现阶乘

package com.lv.study; public class DemoAm4 { //斐波那契数列:生兔子 :从1和1开始 后面一个数等于前面两个数之和 public static void main(String[] args) { test2(); } public static void test2(){ int num1=1; int num2=1; int result =0;//暂时不知道结果 //推算第5轮结果 int n=5; System.out.print("1\t1

C语言编程实现斐波那契数列(递归与非递归)

一.非递归 <1>数组 #include<stdio.h> #include<stdlib.h> int main() { int a[10000] = { 0 };//利用数组求不了较大位置的斐波那契数 int i,m; a[0] = 1; a[1] = 1; printf("请输入要求第几个斐波那契数(大于等于2)\n"); scanf("%d", &m); for (i = 2; i <=m; i++) { a

Python语言打印斐波那契数列

Python代码如下: a, b = 0, 1 while b < 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000: print(b) a, b = b, a+b 打印结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 750