- 课程名称:Linux C语言结构体
- 课程链接:https://www.imooc.com/learn/409
- 章节名称:
- 第6章:位运算的秘密
- 6-4 左移与右移
- 第7章:重识递归函数
- 7-1 递归调用
- 7-2 递归原理
- 第6章:位运算的秘密
- 讲师姓名:
雷过就跑
- 时间:2023-02-015 12:30
课程内容
-
左移:将数据对应的二进制值逐位左移若干位
-
左移时,会把最高位舍弃掉,而在最后补上0
-
规则为:高位丢弃,低位补0
-
左移
n
位相当于,将原来值扩大2n2^n2n倍 -
int x = 0x80000001;// 这是一个符号位为1的整数 x << 1;// 结果是2,符号位超出整型范围,被舍弃
-
如果计算与2相乘,左移操作效率要高出很多
-
-
右移:将数据对应的二进制值逐位右移若干位
- 右移相当于整除2的过程
- 对于符号位为1的右移,右移时要补1
-
函数的递归调用
- 在调用函数过程中,被调用函数调用它本身的过程
- 递归原理
- 函数在定义中的参数,在没有调用的时候,是不会被分配内存单元的,只有在调用的时候才会被分配
- 在调用函数时的,参数就叫实参,会为其分配临时存储单元,然后才将其值传递进来
- 同时传递进来的还有主调函数执行处代码地址,因为调用函数时,会移动到代码其它位置处,函数执行完,再接着调用处继续执行,所以要记录主调函数代码的地址
- 调用函数结束后,将控制转回主调函数,并释放临时存储空间
- 所以在函数调用过程中要保存很多值
- 做保护现场时,传递的返回地址
- 函数参数
- 函数调用结束时,其返回值
- 这些都是数据,都是保存至栈中,通过控制栈指针来容纳这些数据
- 所以如果早递归调用,就是不断在产生上述数据
- 因为是递归调用,所以返回地址应该都相同
- 但参数不同,都在栈中不断被创建,如果没有停止,就出现栈溢出
- 如果执行到某处,停止分配栈空间,也就是不需要递归调用了,就会产生一个返回值
- 带着这个返回值,根据返回地址,从上一次被调用处开始执行
- 递归就是将一个问题规模为
n
的问题简化为规模为n-1
的问题,然后依次降解,直到问题可解,将低规模的解再带入到高规模问题中,最后求出规模为n
的问题的解- 递推思想,是构造一个低阶的规模方法,然后不断增加规模,直到高规模问题得解
学习心得
可以深入理解递归啦
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦