C语言递归初学问题反思

大家好,今天我们来讲一下递归函数。在理论上,递归函数看起来很简单,但实际操作起来可能会有些困难。

刚刚我写了一个递归函数和一个迭代函数来求n位斐波那契数列的数。但是递归函数出现了一个逻辑错误,我没有理解清楚。

让我来解释一下这个错误。我们先来看一下代码。

int digui(int n)
{
	if (n>1)
	{
		return n * digui(n - 1);
	}
	else
		return 1;
}
int diedai(int n)
{
	int c = 1;
	while (n > 1) 
	{
		c *= n;
		n--;
	}
	return c;
}
int main()
{
	int n;
	scanf("%d", &n);
	int l1 = digui(n);
	printf("%d\n", l1);
	int l2 = diedai(n);
	printf("%d", l2);

	return 0;
}

分别用递归和迭代实现,迭代好理解就是循环嘛,递归错误如下

递归函数的错误出现在这里。原本我是想要返回这个值的,不知道当时为什么想要写这样一个语句,现在也想不起来它的作用了。但无论如何,这个错误一直循环干扰了正常的结果。递归本质上是按照条件一层层地深入进去,然后逐步回归。按照逻辑,肯定要一层层地返回这个else语句后的值。所以,返回值干扰了正确的结果。我是在调试过程中发现了这个错误的。

在调试的时候,我发现程序在最后的那个return语句上走了好几遍,我也看了好几遍,花了一段时间才意识到这个错误,哈哈。

所以,我们需要改正这个错误。我们直接删除多余的return。这样就不会出现错误了。

希望通过这个例子,大家能更好地理解递归函数的原理和使用方法。谢谢大家的收听!

.

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小志biubiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值