c语言中Fibonacci级数n元的递归计算程序

c语言中Fibonacci级数n元的递归计算程序,c,recursion,compiler-errors,fibonacci,C,Recursion,Compiler Errors,Fibonacci,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;

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);
}

#包括
ints(intn);
int main(){
int n;
printf(“输入一个数字”);
scanf(“%d”和“&n”);
printf(“%d”,s(n));
返回0;
}
整数s(整数n){
s(1)=1;//错误:赋值的左操作数需要左值
s(2)=1;//错误:赋值的左操作数需要左值
s(n)=s(n-1)+s(n-2);//错误:赋值的左操作数需要左值
返回s(n);
}

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

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

如果(n我认为你的意思相当于

fib(1) = 1;
fib(2) = 1;
fib(n) = fib(n - 1) + fib(n -2);
在C语言中,不能给函数返回的结果赋值

foo(1) = 1;
int x = 2;
int s(int n){
    if(n == 1 || n == 2) { //Base case
       return 1;
    }
    return s(n-1) + s(n-2); //Recursion
}
是不正确的代码。要解释编译器错误,您需要了解什么是
lvalue
。简单地说,
lvalue
是一种可以赋值并获取其地址的东西。一种考虑它的方法是
lvalue
通常出现在表达式的左侧。因此,对于艾克

foo(1) = 1;
int x = 2;
int s(int n){
    if(n == 1 || n == 2) { //Base case
       return 1;
    }
    return s(n-1) + s(n-2); //Recursion
}
x
是一个
左值
,因为您正在分配给它,并且可以获取
x
(使用
&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
,您需要编写使用这些基本情况的函数,然后返回实际值

大概是

foo(1) = 1;
int x = 2;
int s(int n){
    if(n == 1 || n == 2) { //Base case
       return 1;
    }
    return s(n-1) + s(n-2); //Recursion
}
你的代码是假的。你可以读取C函数返回的结果。你不能给函数赋值!
gdb
是一个调试器而不是编译器。
gcc
是一个编译器前端程序,通常用来编译(编译和链接)。