gpt4 book ai didi

c - 无法在递归函数中返回变量的正确值

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:16 25 4
gpt4 key购买 nike

我正在编写以下程序以递归地查找给定数字的阶乘。

#include<stdio.h>
int fact1=1;

int recursion(int x)
{
if(x==0)
{
return fact1;
}

fact1=fact1*x;
x--;
recursion(x);
}

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

问题:

问题是每当我运行这个程序时,它总是给我一些垃圾值 22752240 。

因此为了测试我的递归我放置了printf("%d",fact1)在递归函数中检查是否fact1返回前是120

int recursion(int x)
{
if(x==0)
{
printf("%d",fact1);
return fact1;
}

fact1=fact1*x;
x--;
recursion(x);
}

当我执行程序时,我得到了这个 120 22752240 作为输出,这意味着 recursion()正在打印 fact1 的正确值但无法返回 fact1 的正确值.

谁能解释为什么会这样?

最佳答案

当然。您忘记在 recursion() 的末尾返回 一个值。如果没有 return 语句,使用 recursion() 作为 printf() 的参数会调用 undefined behaviour .

详细来说,只有当 x == 0 为 TRUE 时,您才使用 return 语句返回一个值。在其他情况下,您缺少 return 语句。您还需要为其他情况添加 return 语句。

引用:表格 C11 标准,章节 §6.9.1,函数定义

If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.

也就是说,main() 的推荐签名是 int main(void)

关于c - 无法在递归函数中返回变量的正确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30591952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com