C语言数列如何加速太慢

C语言数列如何加速太慢,第1张

#include <stdio.h>

unsigned int Fibonacci(int n)

int main(void) {

    int n

    while (scanf ("%d", &n), n > 0) {

        printf("%u\n",Fibonacci(n))

    }

    return 0

}

unsigned int Fibonacci(int n) {

    if (n <= 0) return 0

    if (n == 1 || n == 2) return 1

    else {

        int a[2] = {1, 1}, i = 3

        while (i <= n) {

            a[i % 2] = a[i % 2] + a[(i - 1) % 2]

            i++

        }

        return a[(i - 1) % 2]

    }

}

其实这不需要递归,稍微变一下算法就行了。另外,你的printf里的格式字符串错了,应该是"%u"而不是"%d"。

通过以下代码获取文件大小,然后分配相应大小的内存,一次性读取文件到此内存就可以加快读取速度了。具体代码如下:

#include <stdio.h>

#include <stdlib.h>

int main ()

{

FILE * pFile

long lSize

char * buffer

size_t result

/* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */

pFile = fopen ("test.txt", "rb" )

if (pFile==NULL)

{

fputs ("File error",stderr)

exit (1)

}

/* 获取文件大小 */

fseek (pFile , 0 , SEEK_END)

lSize = ftell (pFile)

rewind (pFile)

/* 分配内存存储整个文件 */

buffer = (char*) malloc (sizeof(char)*lSize)

if (buffer == NULL)

{

fputs ("Memory error",stderr)

exit (2)

}

/* 将文件拷贝到buffer中 */

result = fread (buffer,1,lSize,pFile)

if (result != lSize)

{

fputs ("Reading error",stderr)

exit (3)

}

/* 现在整个文件已经在buffer中,可由标准输出打印内容 */

printf("%s", buffer)

/* 结束演示,关闭文件并释放内存 */

fclose (pFile)

free (buffer)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11555092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存