【问题标题】:Local variable returned in recursive function递归函数中返回的局部变量
【发布时间】:2015-03-14 04:23:37
【问题描述】:

我已经为返回完整系列之和的斐波那契数列编写了代码,是否可以将本地“静态 int”变量返回到代码尝试打印总和的主函数。

下面是我的代码

#include<stdio.h>


int fiborecur(int n)
{
    static int first=0,second=1,sum=0,total=0;
    if( n>0 )
    {
        sum = first + second;
        total = total + sum;
        printf("  %d", sum);
        first = second;
        second = sum;
        fiborecur(n-1);
    }
    else
    {
        return total+1;
    }
}
int main()
{
    int n;
    printf("Enter the series length you want = ");
    scanf("%d", &n);
    printf("0  1");
    printf("\nSum of the series after return = %d\n", fiborecur(n-2));
    return 0;
}

【问题讨论】:

  • 你没有返回static int,你正在返回它的值,所以是的。但这看起来它会在第二次调用时失败,因为没有任何东西会重置静态
  • 你可以在没有递归函数的情况下返回它会正常工作。你需要递归函数吗?

标签: c recursion fibonacci


【解决方案1】:

为什么你的 int 值被声明为静态的?使用你的返回值返回当前的总数,然后它会自动发生。

静态值加上递归是灾难的根源。

【讨论】:

    【解决方案2】:

    你的问题是你只在n == 0 时返回总数,但你的主函数实际上用n &gt; 0 调用它。使您的函数始终返回total + 1,不仅在n 为零时(换句话说,只需删除else),它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 2016-02-02
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      相关资源
      最近更新 更多