I Want My Tears Back

        即将毕业的消息,又一次打断了我安逸的生活,大学四年虽然学习了很多,但是因为专业的限制,导致我没有精通的一门技术,所以找个合适的工作肯定还是不够的,和同学商议了很久,决定出去闯荡,就这样,我来到了上海,找到了华清远见上海中心培训公司。

        在这人生地不熟的城市,我们跌跌撞撞的找到了宿舍,虽然些许的简陋,但我们知道这一程是来干吗的,在班主任陈老师的帮助下,我们很快就熟悉了这边的环境,虽然没有认识人,但是还是很快融入了这个新的家庭。

        我们到的第三天就开始了新课,课程第一部分,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); 
}

        我当场就是个好家伙,虽然烧脑,但是这三句就能完事,的确简短,逻辑性也更强,在我询问老师问什么要放着简单方法不用,去费力不讨好的写递归语句的时候,老师只回了我一句话:“让别的程序员看不懂你写的正常的代码,这不正说明你比他强吗?”。一句话过后,我如拨云见日,茅塞顿开!在竞争如此激烈的职场上,你拥有别人没有的技能,那就是你和别人竞争的资本!

        现在,半个多月过去了,经历很多事情之后,我终于明白了,可怕的不是恃才自傲,而是眼高手低,我又重新想起了我来时的目的:这一程,只为追上那个曾经努力奔跑的少年!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值