大家好,今天我们来讲一下递归函数。在理论上,递归函数看起来很简单,但实际操作起来可能会有些困难。
刚刚我写了一个递归函数和一个迭代函数来求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。这样就不会出现错误了。
希望通过这个例子,大家能更好地理解递归函数的原理和使用方法。谢谢大家的收听!
.