首页 > 解决方案 > 为什么我使用递归的阶乘程序不起作用

问题描述

我是编码新手。所以我想编写一个使用递归的 ac 程序来计算一个数字的阶乘。

#include <stdio.h>

int fact(int a) {
  int n = 1;

  if (a != 0)
    return;
  else
    n = n * a;
  a--;
  fact(a);
  return n;
}

int main() {
  printf("%d", fact(5));
  return 0;
}

这是我写的程序。我知道这可能是错误的,但我想如果我能够理解为什么上述程序完全错误,我会更好地理解编程。

标签: c

解决方案


因为每当您将 0 以外的任何值传递给fact您的代码时都会退出,甚至没有返回值:

if(a!=0)
    return;

你应该至少从你的编译器那里得到一个警告,指出这是无效的代码,因为fact它总是会返回一个int值。

但更重要的是,这是一个逻辑错误。

你的意思是写:

if (a == 0) return 1; //0! = 1

推荐阅读