因子递归C:类型问题

Igg*_*ggY 0 c

我在gcc 4.7.2(Ubuntu Server 12.10)上编译此代码时遇到问题

#include <stdio.h>

int main()
{
  long int facto = 30;
  printf("%ld\n", fact(facto, facto - 1);
}
long int fact(long int n, long int a)
{
   if (a == 1)
      return (n);
   fact(n * a, a - 1);
}
Run Code Online (Sandbox Code Playgroud)

我知道这可以用一个参数函数完成,但这不是重点.

我得到的错误是:'fact'的冲突类型(函数声明行)此处隐含的事实声明(与printf一致)

sim*_*onc 6

fact在你打电话之前,你需要一个前瞻声明main

long int fact(long int n, long int a); // forward declaration
int main()
{
  long int facto = 30;
  printf("%ld\n", fact(facto, facto - 1);
}
long int fact(long int n, long int a) // actual function
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以移动fact上面的实现main.但是请注意,这种方法不会扩展到更复杂的程序,而更长的函数会相互调用.

添加 你的阶乘功能是错误的.这是更正后的版本

long int fact(long int n)
{
   if (a == 1)
      return (n);
   return n * fact(n - 1);
}
Run Code Online (Sandbox Code Playgroud)