user-0 提问: 递归问题

回复:
user: user-1
content: 引用 6 楼 u013163178 的回复:[quote=引用 3 楼 mujiok2003 的回复:] [quote=引用 2 楼 mujiok2003 的回复:] #include<stdio.h> int main() { int n; int i; int Fib(int); printf("请你输入n值:"); scanf("%d",&n);  for(i=0;i<=n;i++) {    printf("%d ",Fib(i)); } return 0; }   int Fib(int n) { if(0==n|1==n)   return 1; else return Fib(n-1)+Fib(n-2);  }  //if(0==n|1==n) if(0==n||1==n) [/quote]#include<stdio.h> int main() { int n; int i; int Fib(int); printf("请你输入n值:"); scanf("%d",&n); for(i=0;i<=n;i++) { printf("%d",Fib(i)); } return 0; }   int Fib(int n) { if(1==n|2==n)   Fib(n)=1; else Fib(n)= Fib(n-1)+Fib(n-2); return Fib(n); } 这有为什么不对呢[/quote]  能编译吗？

user: user-0
content: 引用 8 楼 czarten 的回复:[quote=引用 7 楼 u013163178 的回复:] [quote=引用 1 楼 czarten 的回复:] 你看看你return x之前，有任何一句语句和x有关吗  去掉x变量，倒数第二句改成return Fib(n-1)+Fib(n-2) ; 就好了  顺便，除非题目要求，或者练习递归思想，否则斐波那契慎用递归啊为什么不能写Fib(n)=Fib(n-1)+Fib(n-n); return Fib(n);[/quote]  Fib(n)=Fib(n-1)+Fib(n-n)这是数学上的写法 你在程序里这么写，Fib(n)是什么意思，Fib(n)就是把n代入函数Fib()所得到的值，它是个值，而不是变量，只有变量才能赋值 “=”不是等号，而是赋值 这个你要仔细体会 就像3=1+2，是数学上的写法，而在程序中毫无意义  你倒是可以写int x=Fib(n-1)+Fib(n-n);return x;[/quote]有道理啊

user: user-2
content: 你会写Fib(n)=Fib(n-1)+Fib(n-n)说明你还没有弄明白最基础的变量和赋值的概念，建议先弄明白这个，加上递归只会更乱

user: user-2
content: 引用 7 楼 u013163178 的回复:[quote=引用 1 楼 czarten 的回复:] 你看看你return x之前，有任何一句语句和x有关吗  去掉x变量，倒数第二句改成return Fib(n-1)+Fib(n-2) ; 就好了  顺便，除非题目要求，或者练习递归思想，否则斐波那契慎用递归啊为什么不能写Fib(n)=Fib(n-1)+Fib(n-n); return Fib(n);[/quote]  Fib(n)=Fib(n-1)+Fib(n-n)这是数学上的写法 你在程序里这么写，Fib(n)是什么意思，Fib(n)就是把n代入函数Fib()所得到的值，它是个值，而不是变量，只有变量才能赋值 “=”不是等号，而是赋值 这个你要仔细体会 就像3=1+2，是数学上的写法，而在程序中毫无意义  你倒是可以写int x=Fib(n-1)+Fib(n-n);return x;

user: user-0
content: 引用 1 楼 czarten 的回复:你看看你return x之前，有任何一句语句和x有关吗  去掉x变量，倒数第二句改成return Fib(n-1)+Fib(n-2) ; 就好了  顺便，除非题目要求，或者练习递归思想，否则斐波那契慎用递归啊为什么不能写Fib(n)=Fib(n-1)+Fib(n-n); return Fib(n);

user: user-0
content: 引用 3 楼 mujiok2003 的回复:[quote=引用 2 楼 mujiok2003 的回复:] #include<stdio.h> int main() { int n; int i; int Fib(int); printf("请你输入n值:"); scanf("%d",&n);  for(i=0;i<=n;i++) {    printf("%d ",Fib(i)); } return 0; }   int Fib(int n) { if(0==n|1==n)   return 1; else return Fib(n-1)+Fib(n-2);  }  //if(0==n|1==n) if(0==n||1==n) [/quote]#include<stdio.h> int main() { int n; int i; int Fib(int); printf("请你输入n值:"); scanf("%d",&n); for(i=0;i<=n;i++) { printf("%d",Fib(i)); } return 0; }   int Fib(int n) { if(1==n|2==n)   Fib(n)=1; else Fib(n)= Fib(n-1)+Fib(n-2); return Fib(n); } 这有为什么不对呢

user: user-0
content: 引用 1 楼 czarten 的回复:你看看你return x之前，有任何一句语句和x有关吗  去掉x变量，倒数第二句改成return Fib(n-1)+Fib(n-2) ; 就好了  顺便，除非题目要求，或者练习递归思想，否则斐波那契慎用递归啊#include<stdio.h> int main() { int n; int i; int Fib(int); printf("请你输入n值:"); scanf("%d",&n); for(i=0;i<=n;i++) { printf("%d",Fib(i)); } return 0; }   int Fib(int n) { if(1==n||2==n)   Fib(n)=1; else Fib(n)= Fib(n-1)+Fib(n-2); return Fib(n); } 我其实是这么写的，后来才改成那样，这样有为什么不对呢

user: user-1
content: http://ideone.com/liL65Z

user: user-1
content: 引用 2 楼 mujiok2003 的回复:#include<stdio.h> int main() { int n; int i; int Fib(int); printf("请你输入n值:"); scanf("%d",&n);  for(i=0;i<=n;i++) {    printf("%d ",Fib(i)); } return 0; }   int Fib(int n) { if(0==n|1==n)   return 1; else return Fib(n-1)+Fib(n-2);  }  //if(0==n|1==n) if(0==n||1==n)

user: user-1
content: #include<stdio.h> int main() { int n; int i; int Fib(int); printf("请你输入n值:"); scanf("%d",&n);  for(i=0;i<=n;i++) {    printf("%d ",Fib(i)); } return 0; }   int Fib(int n) { if(0==n|1==n)   return 1; else return Fib(n-1)+Fib(n-2);  }

user: user-2
content: 你看看你return x之前，有任何一句语句和x有关吗  去掉x变量，倒数第二句改成return Fib(n-1)+Fib(n-2) ; 就好了  顺便，除非题目要求，或者练习递归思想，否则斐波那契慎用递归啊