前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一面(5)

基础知识 | 每日一面(5)

作者头像
小林C语言
发布2019-12-18 16:52:29
3350
发布2019-12-18 16:52:29
举报
古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:斐波拉契数列递归实现的方法如下:

代码语言:javascript
复制
int Funct( int n )
{
    if(n==0) return 1;
    if(n==1) return 1;
    retrurn Funct(n-1) + Funct(n-2);
}

请问,如何不使用递归,来实现上述函数?

小林:

代码语言:javascript
复制
int Funct( int n ) // n 为非负整数
{
    int a=0;
    int b=1;
    int c;
    if(n==0) c=1;
    else if(n==1) c=1;
    else for(int i=2;i<=n;i++) //应该n从2开始算起
    {
        c=a+b;
        a=b;
        b=c;
    }
    return c;
}

解释:现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位。

100 的二进制是 001 100 100

低位在前 高位在后

001----s3

100----s2

100----s1

所以结果应该是 1

如果先申明的在低位则:

001----s1

100----s2

100----s3

结果是 4

题目跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从D ev C++和V C7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位。

题目跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C++未用空间分配为01110111b,V C7.1下为11001100b,所以在D ev C++下的结果为5,在V C7.1下为1。

注:PC一般采用little-endian,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,所以可能考虑big-endian模式,这样输出结果可能为4。

有时候,正是那些意想不到之人,成就了无人能成之事。——图灵

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档