【问题标题】:program using recursions to calculate nth element of Fibonacci series in c [closed]使用递归计算c中斐波那契数列的第n个元素的程序[关闭]
【发布时间】:2021-05-08 05:25:11
【问题描述】:

gdb 编译器在下面的代码中显示错误。为什么会发生错误以及如何解决。

#include <stdio.h>
int s(int n);
int main(){
    int n;
    printf("enter a number");
    scanf("%d",&n);
    printf("%d",s(n));
    return 0;
}
int s(int n){
    s(1) = 1;                      //error: lvalue required as left operand of assignment
    s(2) = 1;                     //error: lvalue required as left operand of assignment
    s(n) = s(n-1) + s(n-2);      //error: lvalue required as left operand of assignment
    return s(n);
}

【问题讨论】:

  • 你的代码是假的。您可以通过 C 函数READ 结果RETURNED。你不能给一个函数赋值TO
  • gdb调试器 而不是编译器。 gcc 是编译器前端程序,人们通常调用它来构建(编译和链接)。

标签: c recursion compiler-errors fibonacci


【解决方案1】:

正如@paulsm4 指出的那样,您做错了,您不能为函数赋值。将您的 s 函数更改为:

int s(int n){
 if(n <= 2){
  return 1;
 }                     
 return s(n-1) + s(n-2);
}

【讨论】:

    【解决方案2】:

    我认为你的意思是相当于

    fib(1) = 1;
    fib(2) = 1;
    fib(n) = fib(n - 1) + fib(n -2);
    

    在 C 中,您不能为函数返回的结果赋值。所以像

    foo(1) = 1;
    

    代码不正确。要解释编译器错误,您需要了解lvalue 是什么。简单地说,lvalue 是您可以为其分配值并获取其地址的东西。一种思考方式是lvalue通常出现在表达式的左侧。所以对于像

    int x = 2;
    

    x 是一个lvalue,因为您正在分配它,您可以获取x 的地址(使用&amp;x)。对于函数返回的值,情况并非如此。

    解决你原来的问题

    int s(int n){
        s(1) = 1;
        s(2) = 1;
        s(n) = s(n-1) + s(n-2);
        return s(n);
    }
    

    如上所述,s(1) = 1 等语句是不正确的代码。所以fib(1) = 1 应该转换为返回值 1 的函数。对于 2 也是如此。对于任何一般的n,您需要编写使用这些基本情况的函数,然后返回实际值。

    类似

    int s(int n){
        if(n == 1 || n == 2) { //Base case
           return 1;
        }
        return s(n-1) + s(n-2); //Recursion
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2022-12-10
      • 2014-03-13
      相关资源
      最近更新 更多