初学函数心得

知识点从主函数到子函数传值有不同的方式,有传值,传地址,传引用这三种方式,从实参到形参,不同的方式可以实现不同的功能。实参到形参,首先要求两者类型一样,否则不能传值。根据能否改变实参的方式可以分为两类,一种为能改变实参的方式,有两种,为传地址和传引用,另一种为传数值。这三种方式所井义行的方式不相同。首先,是传数值。这种不改变实参的方式,最多只能返回一个数值。但是当使用全局变量的时候,却能够改变数值。这种方式是临时在子函数运行时,临时创建空间,将实参值赋值给形参,之后没有操作,只进行简单的复制操作。第二种是传地址,这种方式再声明时,需要声明形参为指针变量,同时实参表示时,同样需要为地址值。虽然在不同函数,但是都指向同一个地址,从而改变地址内容可以改变实参。第三种是传引用,这种方式相当于用了一个替身,但是都是这个变量。因为函数是可以相互调用的,所以当碰到一个重复步骤的问题,可以利用函数自身调用,实现对问题简化解决,这就是递归函数。定义:直接或者间接调用自身的函数为递归函数。它通常吧一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题。递归的关键在于找出递归定义和递归终止条件。 递归定义:让问题向边界条件转化的规则。 注:递归必须让问题越来越简单》递归终止条件:也就是所叙述问题的最简单情况,他本身不在所使用函数的定义。例如:欧几里得算法: gcd(m,n) {if(n==0)return(m); else return (gcd(n,m mod n)); } 感想1:学习了递归与嵌套之后,我们发现利用函数可以做很多的一事情,函数调用函数,可对于一件重复操作的问题进行运算。用很短的代码实现一个问题。但是要注意结束条件,否则将无法结束。当用递归函数时,修改是比较困难的,我们需要能够监控程序运行的过程,并且难以考虑到各种特殊的问题。并因此而难以调试,花费大量的精力和时间。而有时对于一个问题,使用主函数而更显得容易和好做,并且节省时间,对于同一个问题,使用函数调用更加繁冗。可能是在解决问题,没有能正确选择方式.可能是没有找好终止 条件让编程的调试变得格外困难。正是这样,对自身能力提出了更高的要求,万事开头难,咬咬牙坚持下去。 感想2:简单的c函数利用函数可以做很多的事情,将很多的有相交的步骤的问题,相交的部分模块化,分解为一个个小的模块,分别做成不同的函数,当要达成某一个问题时,利用函数可以调用函数,可以做成某一个问题。像树枝一样,由主函数出发,分支打成某个要求。相反的,也可以想树根一样,由茎向下分开,想搜索一样,搜索到每个尽头,不同的搜索方式会达成不同的效果,广度,深度搜索。不同的题型,对函数有不同的需要,有一次我盲目使用递归函数,自己调用自己,但是当自己调用自己时,分为不同环境下的调用,正因次,调试让我非常头痛。但是,我感觉可以利用这一个函数可以解决一个问题,还算是比较高效。当然这没有考虑到时间复杂度。因为后来一想,这个问题在主函数也可以解决,而且调试简单,不用反复调用函数本身,而因此更快。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值