C语言中的回掉和递归

在复习C语言的时候看到了回调和递归,然后发现自己忘记了这个东西。想去找一下回调和递归的定义和不同之处。然后发现没找到。。决定自己来写一些自己的认识让大家在寻找资料的时候有所依据。

回调函数和递归函数都是C语言中很重要的思想函数,往往我们在说回调或者递归的时候都不是说你会不会用这个函数,都会说你有没有回调和递归的思想。

首先我们来介绍一下递归函数:

在我们大家的日常生活中,递归这个思想确实很少会用到,因为这种思想确实跟我们正常人或者说直接接触C语言的程序的人的思维有很大的不同。

我们大家的思维一般情况下都是迭代的思维,举个栗子~

我们来计算一下一个字符串的长度,大家肯定会这么做:

C语言中的回掉和递归

让一个指针指向字符串首地址然后让他自增直到遍历整个字符串,返回我们的字符串长度,对吧。

这种思维是我们大家都能看到的,然而递归呢

C语言中的回掉和递归

这个同样的效果但是递归锁表现出来的就是让人一眼看不懂。

他表达的是:

一进函数,整个字符串就是"bdss"+1

第二次调用,整个字符串就是“dss”+1+“bdss”+1

.

.

.

最后一次就是"\0"+1+“s”+1+“ss”+1+“dss”+1+“bdss”+1

递归就是在运算中不用别的函数,就通过自己调自己来完成整个运算。

汉诺塔就是利用递归来完成的

有A.BC三根柱子,A柱子上有从上往下依次增大的3个圆盘,我们要把A柱子上的圆盘拿到C柱子上,而且不能把大的压在小的上面,一次只能往C柱子上放一个圆盘

这个如果用迭代的思想恐怕任务量之繁重,直接脑容量爆炸而放弃(当然不排除脑子就是好用的三鹿儿童)。

然后使用递归,就只用几行代码:

C语言中的回掉和递归

这就是递归的厉害之处,恐怕你看懂之后的一句哇!足矣让你体验到这种可怕。



相对于递归,回调就会显得很容易理解,毕竟跟我们的思维很相近

C语言中的回掉和递归

回调就是自己写函数,系统帮你调,用一个函数指针,可以帮我们省掉一大笔书写函数名的时间。


以上就是我对递归和回调的想法,因为是新手,理解很片面,我会继续加油 在程序员的路上走下去