即将毕业的消息,又一次打断了我安逸的生活,大学四年虽然学习了很多,但是因为专业的限制,导致我没有精通的一门技术,所以找个合适的工作肯定还是不够的,和同学商议了很久,决定出去闯荡,就这样,我来到了上海,找到了华清远见上海中心培训公司。
在这人生地不熟的城市,我们跌跌撞撞的找到了宿舍,虽然些许的简陋,但我们知道这一程是来干吗的,在班主任陈老师的帮助下,我们很快就熟悉了这边的环境,虽然没有认识人,但是还是很快融入了这个新的家庭。
我们到的第三天就开始了新课,课程第一部分,c语言,我又要温故而知新,在繁琐的代码中寻找新的自我,华清远见上海中心的老师讲的很细,但是我没有认真听,直到那个令人头疼的指针,一看指针整个人都感觉不好了,这是啥啊?为啥会有指针这种东西?这东西真的有用吗?短短的几行代码让我不禁反问自己,这真的是c语言吗?
老师看到我满头问号放慢了讲课速度,对我进行循序渐进的引导,用黑板给我画出了数据在内存中大概的样子,我从满头问号到渐渐开明只用了半天,在老师的逐步引导下让我看到了return的短板,在剩下的自习时间中,我慢慢的摸清了指针的门道,然后就发现,这玩意不是比for循环简单多了吗?想读取数据直接让地址偏移就行,又快又省事,现在看见题就想着用指针做。
本来以为在指针之后c基础已经没什么能让我学习了的时候,突然又出现了一个名为递归函数的东西,但是我还是硬着头皮开搞,一看题目:输入一个数,看这个数的二进制有几个1,我直接好家伙,经过十几分钟的努力,虽然写出来了,但是这代码看的我痛不欲生。
#include <stdio.h>
int find_1(unsigned int a,int i,int count);
int main(int argc, const char *argv[])
{
int i=0,count = 0;
unsigned int a;
scanf("%u",&a);
count = find_1(a,i,count);
printf("%d\n",count);
return 0;
}
int find_1(unsigned int a,int i,int count)
{
if(a&1)
count++;
i++;
if(i==32)
return count;
return find_1(a>>1,i,count);
}
这复杂的逻辑,老师看了直接说,那么多方法你偏偏选择了最难的那个,再重新想想,我就心想这玩意用while多简单啊,几句话就能解决,正经人谁用递归啊。一想到用while解决这个问题时的方法,我突然脑子里就有了一些思路,是不是也能用递归仿照那个方法也去做一个出来。
好一顿冥思苦想,不多说,直接上代码:
#include <stdio.h>
int find_1(unsigned int a);
int main(int argc, const char *argv[])
{
int count;
unsigned int a;
scanf("%u",&a);
count = find_1(a);
printf("%d\n",count);
return 0;
}
int find_1(unsigned int a)
{
if(a==0)
return a;
return a%2+find_1(a/2);
}
我当场就是个好家伙,虽然烧脑,但是这三句就能完事,的确简短,逻辑性也更强,在我询问老师问什么要放着简单方法不用,去费力不讨好的写递归语句的时候,老师只回了我一句话:“让别的程序员看不懂你写的正常的代码,这不正说明你比他强吗?”。一句话过后,我如拨云见日,茅塞顿开!在竞争如此激烈的职场上,你拥有别人没有的技能,那就是你和别人竞争的资本!
现在,半个多月过去了,经历很多事情之后,我终于明白了,可怕的不是恃才自傲,而是眼高手低,我又重新想起了我来时的目的:这一程,只为追上那个曾经努力奔跑的少年!