如果有多个return语句,如何在C中执行return语句?

时间:2018-11-03 13:06:00

标签: c return

根据我对C的了解,应在以下代码中执行函数fact中的第一条return语句。而是执行函数中的最后一个return语句。代码在这里如何工作?为什么函数fact中的第一个return语句没有执行?

数字框架:

#include <stdio.h>
int a = 2, count = 1, fact0 = 1;

int fact(int n) {
    if (n == count) {
        return fact0;//Only this return statement should be executed
    }
    fact0 = fact0 * a;

    a++;
    count++;
    fact(n);
    return 1;//But this return statement is executed , Why?
}

int main() {
    int n;
    setbuf(stdout, NULL);
    printf("Enter the factorial number\n");
    scanf("%d", &n);
    printf("The factorial of the number is %d", fact(n));
    return 0;
}

输出为:

Enter the factorial number
 4
The factorial of the number is 1

3 个答案:

答案 0 :(得分:4)

您有一堆嵌套的函数调用。最里面的返回来自您期望的位置,其他则来自其他return语句。

// 1st call, in main
fact(4); // calls fact(4) with count == 2
    fact(4); // calls fact(4) with count == 3
        fact(4); // calls fact(4) with count == 4
        return fact0; // as expected
    return 1;
return 1;

答案 1 :(得分:2)

您需要学习如何调试代码。一个不错的开始就是像这样修改fact

int fact(int n) {
    printf("a: %d count: %d fact0: %d n: %d\n", a, count, fact0, n);
    if (n == count) {
        printf("n is equal to count\n");
        return fact0;//Only this return statement should be executed                                               
    }
    fact0 = fact0 * a;

    a++;
    count++;
    fact(n);
    return 1;//But this return statement is executed , Why?                                                        
}

然后,运行将如下所示:

$ ./a.out 
Enter the factorial number
4
a: 2 count: 1 fact0: 1 n: 4
a: 3 count: 2 fact0: 2 n: 4
a: 4 count: 3 fact0: 6 n: 4
a: 5 count: 4 fact0: 24 n: 4
n is equal to count
The factorial of the number is 1

这应该为正在发生的事情提供一个很好的线索。如果需要,插入更多打印语句。

答案 2 :(得分:0)

问题在于,使用4这样的值时,您需要输入一些递归级别。

所有子调用完成后,程序将继续执行并执行最后一个return语句,无论如何都会给您1。

一种可行的方法是返回事实(n),而不仅仅是调用它并删除最后一个return语句。