黑马程序员技术交流社区
标题:
关于递归的一些大疑问。
[打印本页]
作者:
fjwp4399
时间:
2015-4-8 23:28
标题:
关于递归的一些大疑问。
/*
今天做基础测试,有这么一道题是这样子的:
有八个人坐在一起,问第8个人多少岁?他说比第7个人大3岁。问第7个人多少岁?他说比第6个人大3岁。问第6个人多少岁?他说比第5个人大3岁。问第5个人多少岁?他说比第4个人大3岁,以此类推,最后问第1个人多少岁?他说是10岁。请问第8个人多大?(C语言)
*
然后我写的是这样子:
#include <stdio.h>
int main()
{
int i, age[8]; // age
表示第i个人的年龄
age[1] = 10;
for (i = 2; i <= 8; ++ i) // 从第2个人开始一直到第8个人,他们都比上一个人大3岁
age
= age[i - 1] + 3;
for(i = 1;i<=8; ++i)
printf("%d\n", age
);
return 0;
}
依次运行的结果是:10、13、19、22、25、28、
8
本来是最后一个数应该为32,为什么是8?求解。
作者:
qiuyuhuaihua
时间:
2015-4-9 00:02
你的角标越界了是根本原因!数组age[8]下标的最大值是7,也就是说你的age[8]越界了,但是你刚好又在声明age[8]之前声明了一个int i,所以你的age[8]就是 i。你可以在你的第一个for循环和第二个for循环过程中一直打印age[8],你就会发觉它的值跟i是一样的。最直接的方法就是打印age[8]和i的地址,目测是一样的。
所以这道题,你有三个问题:
1、首先我感觉你这个方法不是递归,应该算是迭代。(你这道题我也做过,我使用的while循环)
2、对数组不熟悉,连int age[8]数组,你竟然还能访问age[8]可以看出,基础不扎实。
3、最后一点,李明杰老师讲的那个C语言基础,关于数组,关于字符串,字符数组,指针和地址、已经MAC的寻址方式,你是没懂的。这个比较难,但是懂了你会发觉真的很有意思!
说的比较多,不喜勿喷
作者:
fjwp4399
时间:
2015-4-9 22:28
qiuyuhuaihua 发表于 2015-4-9 00:02
你的角标越界了是根本原因!数组age[8]下标的最大值是7,也就是说你的age[8]越界了,但是你刚好又在声明age[ ...
首先很感谢你的回答。我之前学习c语言都是直接看视频,以为都看懂了,没有什么上手的经验,事实上,我门都没入,所以基础很差。我看了下,age【8】和i的地址是一样。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2