C中的递归因子程序在执行时挂起

时间:2013-02-25 00:32:34

标签: c eclipse recursion factorial

我正在编写一个程序来显示计算给定数量200万次的阶乘所需的时间。我是在C / C ++ Eclipse环境中使用Debian Linux编写的。当程序到达int temp = n * rfact(n-1);时,它会挂起并且不会执行任何其他操作。

这是我到目前为止所得到的:

#include <stdio.h>
#include <time.h>

//prototypes
int rfact(int n);

main()
{
    int n = 0;
    int i = 0;
    double result = 0.0;
    clock_t t;
    printf("Enter a value for n: ");
    scanf("%i", &n);

printf("n=%i\n", n);

    //get current time
    t = clock();

    //process factorial 2 million times
    for(i=0; i<2000000; i++)
    {
        rfact(n);
    }

    printf("n=%i\n", n);

    //get total time spent in the loop
    result = (clock() - t)/(double)CLOCKS_PER_SEC;

    //print result
    printf("runtime=%d\n", result);
}

//factorial calculation
int rfact(int n)
{
    int temp = n * rfact(n-1);
    printf(i++);
    return temp;
}

3 个答案:

答案 0 :(得分:5)

您缺少基本情况,因此您遇到了无限递归。到达n == 1n == 0时需要停止:

int rfact(int n)
{
    if (n <= 0)
        return 1;
    return n * rfact(n-1);
}

此外,阶乘函数并不是递归的最佳用例,因为迭代版本可以说更具可读性,可能更快,但这是一个不同的故事:)

答案 1 :(得分:1)

你的rfact函数没有基本情况。这意味着将永远调用rfact(n-1)。

答案 2 :(得分:1)

我同意我上面的人,你错过了递归的基本情况

但要注意做一个2'000'000次因子,你的变量会因为花费大量时间来终止计算而溢出