为什么我的阶乘程序正常工作,而我几乎相同的pow程序却无效?

问题描述 投票:5回答:2

这是我的阶乘程序,它正在执行并给出正确的结果:

#include <stdio.h>

int main()
{
    int n;

    printf("enter the no=");
    scanf("%d", &n);
    fun(n);
    printf("%d\n", fun(n));

    return 0;
}

int fun(int n)
{
    if(n == 0)
        return 1;
    else
        return fun(n - 1) * n;
}

这是我的程序,用于计算数字的幂—这是0,而不是正确的结果,但几乎相同:

#include <stdio.h>

int main()
{
    int m, n;

    printf("enter the no=");
    scanf("%d%d", &m, &n);
    pow(m, n);
    printf("%d\n", pow(m, n));

    return 0;
}
int pow(int m, int n)
{
    if(n == 0)
        return 1;
    else
        return pow(m, n - 1) * m;
}

两者都在同一编译器上运行。

为什么我的阶乘程序正常工作,而我几乎相同的幂程序却无效?

c gcc compiler-optimization pow
2个回答
5
投票

这里有一些问题。首先,在第一次调用函数之前,您没有为函数声明原型。为此,您需要将int pow(int, int);放在main上方。这使编译器确切地知道您的函数期望什么以及返回什么。


3
投票
有关此问题的一些背景知识:GNU C编译器(大概是您正在使用的编译器)为大多数Standard C Library函数提供了隐式声明,这些声明可以通过特定于目标的方式进行优化。 pow是其中之一。
© www.soinside.com 2019 - 2024. All rights reserved.