c语言中Fibonacci级数n元的递归计算程序
gdb编译器显示以下代码的错误。为什么会发生错误以及如何修复它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;
#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
是一个编译器前端程序,通常用来编译(编译和链接)。