今天在看一个题目时,本来是想测试用递归方式计算斐波拉西数列第N项值的耗时。结果出现了意想不到的问题~
废话不多说,直接上代码:
1 #include <stdio.h>
2 #include <time.h>
3
4 long long Fibonacci(unsigned int n)
5 {
6 if(n<=0)
7 return 0;
8 if(n==1)
9 return 1;
10 return Fibonacci(n-1)+Fibonacci(n-2);
11 }
12
13 int main()
14 {
15
16 clock_t t1,t2;
17 unsigned int num;
18 long long result = 0;
19 scanf("%d",&num);
20 t1 = clock();
21 result = Fibonacci(num);
22 t2 = clock();
23 double duration;
24 duration = (double)(t2-t1)/CLOCKS_PER_SEC;
25
26 //printf("%d,%f",result,duration);
27 printf("%d\n",result);
28 printf("%f",duration);
29
30 return 0;
31 }
请注意第26行,我输入30,如果用第26行输出结果,则输出结果如下,显然结果是错误的:
但如果分成两句写,再输入30,用27、28行输出,则输出就对了~ 如下:
我是在Microsoft的WIN7 && VS2010 ultimate下编译执行的,计算结果是对的,duration两次值都是一样的,只不过打印结果不对。按我自己理解printf不应该跟打印的变量数有关吧,不知道到底是什么原因,有人说用一行打印可能是printf的某种状态更改了,跟VS2010自身有关,所以特意发到博客园请大家看看这是什么原因,希望有大家帮忙解答!或者知道与什么有关,请留言交流,相互学习下~谢谢~:-)