专栏首页海天一树小朋友学C语言(16):斐波那契数列的非递归实现

小朋友学C语言(16):斐波那契数列的非递归实现

一、斐波那契简介

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这个数列从第3项开始,每一项都等于前两项之和。

二、非递归实现

动手编写程序:

#include <stdio.h>
int fibonacci(int n) 
{
    if(1 == n || 2 == n)
    {
        return 1;
    }
    int f1 = 1;
    int f2 = 1;
    int f3 = 0;
    for(int i = 3; i <= n; i++)
    {
        f3 = f1 + f2;
        f1 = f2; 
        f2 = f3;
    }
    return f3;
}
int main()
{    
    int m, result;
    printf("input  item number: ");
    scanf("%d", &m);
    result = fibonacci(m);
    printf("The result is %d", result);
    return 0;
}

运行结果:

input n: 6
The result is 8

新知识点: (1)这里出现了一个新的函数scanf()。scanf()的作用是读取键盘或鼠标的输入。n是你通过键盘输入的值,&是取地址符,&n就是n在内存里的地址。找到了n在内存中的地址,也就取到了n的值。 假如你输入n 的值为 3,则&n就是3在内存里的地址,则n就是3。 scanf()的作用与printf()的作用相反。printf()的作用是打印、输出。 这两个函数都是在stdio.h中声明的。 【注意】多数线上编译器不支持scanf()函数,所以这个程序要用本机编译器(比如苹果电脑的Xcode,PC的dev c++)来编译。

(2) if(1 == n || 2 == n) { return 1; } 这段表示,假如你输入的n为1或2,则返回1。下面的语句都不被执行。

(3)假如你输入的值大于2,比如你输入了6,则fibonacci()函数中的for循环是这么执行的: 第一次,i = 3, i <= 6为真,f3 = f1 + f2 = 1 + 1 = 2, f1 = f2 = 1, f2 = f3 = 2 第二次,i = 4, i <= 6为真,f3 = f1 + f2 = 1 + 2 = 3, f1 = f2 = 2, f2 = f3 = 3 第三次,i = 5, i <= 6为真,f3 = f1 + f2 = 2 + 3 = 5, f1 = f2 = 3, f2 = f3 = 5 第四次,i = 6, i <= 6为真,f3 = f1 + f2 = 3 + 5 = 8, f1 = f2 = 5, f2 = f3 = 8 第五次,i = 7, i <= 7为假,循环结束。最终返回的f3的值为8

三、作业

(1)输入n = 1,用断点查看程序的执行过程。 (2)输入n = 2,用断点查看程序的执行过程。 (3)输入n = 3,用断点查看程序的执行过程。 (4)输入n = 4,用断点查看程序的执行过程。 (5)输入n = 5,用断点查看程序的执行过程。 (6)输入n = 6,用断点查看程序的执行过程。 (4)在纸上默写这个程序

本文分享自微信公众号 - 海天一树(gh_de7b45c40e8b),作者:海天一树

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小朋友学Java(9):抽象类与接口

    之前提过面向对象有三大特性:封装、继承、多态。 还有另一种说法,即面象对象有四大特性:抽象、封装、继承、多态。 这两种说法都是对的,不必拘泥于哪种说法。关键要能...

    海天一树
  • 2017年第二十三届NOIP(C语言)普及组初赛试题及详细答案

    竞赛时间: 2017 年 10月14日 14:30~ 16:30 选手注意:不得使用任何电子设备(如计算器、手机、电子词典等 )或查阅任何书籍资料

    海天一树
  • 小朋友学算法(18):交换机器的最小代价

    有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增。移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和...

    海天一树
  • C语言--基础002--for循环

    静心物语313
  • ​借助云开发数据库实现小程序列表上拉刷新功能丨云开发101

    上一期101专栏中,我们介绍了如何借助云开发数据库实现小程序的列表触底自动加载功能,相对应的,小程序列表上拉刷新又该如何实现呢?本期专栏就来为大家解答。

    腾讯云开发TCB
  • 入云必备:云环境下的合规性保障指南

    大家当然有能力确保自己的云方案遵循PCI DSS、HIPAA以及其它监管要求的合规条款,但仍需要凭借着大量调查与不懈努力获得证明合规性水平的必要解答及文件。 尽...

    静一
  • 云服务使用成本过高?五款工具帮你顺利缩减云开支

    随着将更多工作负载逐步转移到云环境当中,大家可能发现准确并及时地追踪自己的月度云计算账单并不像原本想象中的那么简单。当然,使用云服务供应商的产品肯定要比自行购买...

    静一
  • 基于WDF的PCI/PCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)

    原文出处:http://www.cnblogs.com/jacklu/p/4687325.html

    用户7043923
  • 2020年云计算预测

    2019年,云计算行业日趋成熟,几乎覆盖了IT生态系统的各个组成部分。随着亚马逊、微软Azure和谷歌云平台的持续领先,早期公共云提供商的位置争夺战开始逐渐消退...

    SDNLAB
  • 关于多云的最大误解

    https://www.cloudops.com/blog/the-biggest-myths-of-multi-cloud/

    CNCF

扫码关注云+社区

领取腾讯云代金券