Hi mọi người,
Mình có làm bài tập tính tổng các số tự nhiên tự 1 đến n bằng đệ quy, đệ quy đuôi và khử đệ quy, sau đó đo xem thằng nào có thời gian chạy nhanh hơn.
Thì mọi người cũng biết là khử đệ quy chạy nhanh nhất, tiếp đó là đệ quy đuôi rồi mới tới đệ quy, nhưng trong CodeBlocks thì thời gian chạy luôn là … 0 !
Đây là source code: http://codepad.org/YLzRqShX
// Tính tổng 1 + 2 + 3 + ... + n
int Sum_Recursion(int n)
{
if (n == 1)
return 1;
return n + Sum_Recursion(n - 1);
}
int Sum_TailRecursion(int n, int x)
{
if (n == 1)
return x;
return Sum_TailRecursion(n - 1, n + x);
}
int Sum_NoRecursion(int n)
{
int sum = 1;
for (int i = 2; i <= n; ++i)
sum += i;
return sum;
}
int main()
{
int n = 50;
printf("Sum_Recursion(%d) = %d\n", n, Sum_Recursion(n));
printf("Sum_TailRecursion(%d) = %d\n", n, Sum_TailRecursion(n, 1));
printf("Sum_NoRecursion(%d) = %d\n", n, Sum_NoRecursion(n));
clock_t start1 = clock();
for (int i = 0; i < 10000; ++i)
Sum_Recursion(n);
clock_t end1 = clock();
clock_t start2 = clock();
for (int i = 0; i < 10000; ++i)
Sum_TailRecursion(n, 1);
clock_t end2 = clock();
clock_t start3 = clock();
for (int i = 0; i < 10000; ++i)
Sum_NoRecursion(n);
clock_t end3 = clock();
double time1 = (double)(end1 - start1) / CLOCKS_PER_SEC;
double time2 = (double)(end2 - start2) / CLOCKS_PER_SEC;
double time3 = (double)(end3 - start3) / CLOCKS_PER_SEC;
printf("Sum_Recursion(%d) runs %lf seconds\n", n, time1);
printf("Sum_TailRecursion(%d) runs %lf seconds\n", n, time2);
printf("Sum_NoRecursion(%d) runs %lf seconds\n", n, time3);
getch();
return 0;
}
Đoạn code trên:
Nhưng hình như Code::Blocks luôn luôn cho kết quả là 0.00000... chứ không phải giờ nhích lên nổi số 1.
Cho mình hỏi vì sao lại như thế ?
Cảm ơn mọi người 





83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?