c - 为什么我使用递归的阶乘程序不起作用
问题描述
我是编码新手。所以我想编写一个使用递归的 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;
}
这是我写的程序。我知道这可能是错误的,但我想如果我能够理解为什么上述程序完全错误,我会更好地理解编程。
解决方案
因为每当您将 0 以外的任何值传递给fact
您的代码时都会退出,甚至没有返回值:
if(a!=0)
return;
你应该至少从你的编译器那里得到一个警告,指出这是无效的代码,因为fact
它总是会返回一个int
值。
但更重要的是,这是一个逻辑错误。
你的意思是写:
if (a == 0) return 1; //0! = 1
推荐阅读
- angular - Angular 7 + NG Bootstrap,从服务中打开模式?
- ef-code-first - 用 EF Code First 改变 localdb 的路径
- javascript - 如何从Angular 6或7组件内的LESS文件访问styles.less中的LESS变量?
- c# - 如何更改 Swagger 响应的类型?
- javascript - AngularJS 服务返回对错误控制器实例的响应
- wordpress - elevatezoom 正在工作,但元素未显示(当我检查 html 时)
- node.js - 如何安排对话流
- kubernetes - 在 NAT 后面设置 kubernetes 工作节点
- powershell - 使用 Get-WmiObject 将多个对象添加到数组中 | Where-对象
- excel - 使用 VBA 代码过滤表后如何计算没有标题的行?