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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)