Bingo » 日志 » 今天又动怒了
今天又动怒了
xiaoB.M. 发表于 2007-08-12 14:37:42
先上聊天记录:
考虑到涉及个人隐私问题,涂掉了昵称
XXXXXXXXXXX12:51:35
在不`~?
xiaob.m. 12:51:28
恩
XXXXXXXXXXX12:51:59
有个个程序我看不明```
xiaob.m. 12:56:40
哦
XXXXXXXXXXX12:58:52
#include<stdio.h>
main()
{
long result,number;
printf("Enter an integer:");
scanf("%1d",&number);
result=fibonacci(number);
printf("Fibonacci(%1d)=%1d\n",number,result);
return 0;
}
long fibonacci(long n)
{
if(n==0||n==1)
return n;
else
return fibonacci (n-1)+fibonacci(n-2);
}
XXXXXXXXXXX12:58:59
就是这个``
XXXXXXXXXXX13:05:32
能解释下吗`~?`
xiaob.m. 13:33:00
这就是一个递归程序啊
XXXXXXXXXXX 13:34:29
我知道````但就是不明程序的运算方式```
xiaob.m. 13:34:59
什么不明白?
你可以在纸上画出调用过程来
XXXXXXXXXXX 13:36:50
我就是不明调用涵数个度``
xiaob.m. 13:38:39
你把从3到5的调用写出来就知道了
XXXXXXXXXXX 13:39:50
怎么写```不明哦``
xiaob.m. 13:40:34
求F (3)等于多少的时候调用了几次函数,怎么调用的,调用顺序又是怎么样
XXXXXXXXXXX 13:41:20
你能解释么`````
xiaob.m. 13:45:53
我怎么解释??
说了就是函数的递归调用
比如求3的时候
F(3)
3不等于0 不返回
3不等于1 不返回
调用 F(3-1=2), F(3-2=1)
接下来是F(2)
2不等于0 不返回
2不等于1 不返回
调用 F(2-1=1), F(2-2=0)
接下来调用F(1)
1等于1 所以返回 1
再调用F(0)
0等于0 返回 0;
所以最后F(2)返回的是F(1)+F(0)= 1;
接下来调用F(1)
1 等于1 返回 1
所以F(3) 返回的解说是
F(2)= 1 F(1) = 1
F(3) = F(2)+ F(1)
XXXXXXXXXXX 13:53:06
还真的不明````晕```
XXXXXXXXXXX 13:56:34
能详细的说明下么``````
xiaob.m. 13:58:38
这还不详细?
XXXXXXXXXXX 13:59:12
我还是不明```
XXXXXXXXXXX 13:59:28
就求F=3解释下````
xiaob.m. 13:59:48
我都把所有的调用过程都写出来了啊,其他的我也不知道怎么说了
XXXXXXXXXXX 14:00:53
真的不明```哎````
那为什么输入3明``打印出2来`?
xiaob.m. 14:00:57
F(3) 的结果是2
XXXXXXXXXXX 14:01:21
为什么``
xiaob.m. 14:01:34
F(3)= F(2) + F(1)
XXXXXXXXXXX 14:02:15
我知道是这样```
但为什么不是1`
xiaob.m. 14:02:45
F(2) = F(1) + F(0)
XXXXXXXXXXX 14:03:13
你这样说我真的不明```
XXXXXXXXXXX 14:03:20
==
XXXXXXXXXXX 14:04:21
就是说到最后如果哪个F的值=F(1)+F(0)
就打印哪个么`~?
xiaob.m. 14:05:17
你会求F(2) 么???
XXXXXXXXXXX 14:05:56
不会````如果我会的话就不用问你了``
xiaob.m. 14:06:06
求F(1)呢
XXXXXXXXXXX 14:06:26
全部不会``
xiaob.m. 14:06:23
你会函数调用么
XXXXXXXXXXX 14:06:44
不是`````0和1就明```
xiaob.m. 14:07:44
return fibonacci (n-1)+fibonacci(n-2);
这句话什么意思知道么
XXXXXXXXXXX 14:08:42
返回fibonacci (n-1)+fibonacci(n-2)的值给调用它的变量`
xiaob.m. 14:09:07
fibonacci (n-1)这个是什么
xiaob.m. 14:09:50
当n=2是把这句话翻译一下
fibonacci (n-1)+fibonacci (n-2)
XXXXXXXXXXX 14:10:50
是执行2的递归么`~?
xiaob.m. 14:11:37
恩
当n=2的时候
long fibonacci(long n)
{
if(n==0||n==1)
return n;
else
return fibonacci (n-1)+fibonacci(n-2);
}
XXXXXXXXXXX 14:12:14
但+fibonacci(n-2)为什么要这个`~?
xiaob.m. 14:14:06
因为程序要求的是一个数列(知道数列吗)
它的递推公式是:
F(0) = 0;
F(1) = 1;
F(n)= F(n-1)+F(n-2)
XXXXXXXXXXX 14:15:00
我就是不明这个公式````
我书上都是这样写``但我就是看不明```
xiaob.m. 14:15:01
你学过数学没
XXXXXXXXXXX 14:15:25
我数学好差的```
xiaob.m. 14:15:41
知道什么叫数列吗
XXXXXXXXXXX 14:16:09
不知``
xiaob.m. 14:16:09
C程序知道什么叫数组么
XXXXXXXXXXX 14:16:41
不知```因为还没看到```嘻嘻``
xiaob.m. 14:16:50
那算了,这个递归你不用看了
XXXXXXXXXXX 14:17:12
为什么```?
一直认为自己比较有耐心,在给别人讲解题目的时候,总是能说个明白,高中也这样认为,不过发现自己有时候情绪非常容易激动,一下就控制不了自己了。
对于上面说的那位,我实在没有多少言语了,说完我就直接把他拉入黑名单了,记得他加我的时候是去年了,一年的时间他的C语言学习还在这水平,搞笑的是居然数列,数组都不知道。也许递归跟这些没关系,不过这些基础都不知道,递归原理明白了又能怎么样呢,自己当时实在是火了。
不过自己的容易激动的问题还是要注意一下
