C语言初阶————函数4

8月1日学习总结:

        本次学习主要为函数的递归:

        递归主要分为三个方面:

(1)什么是递归?

     程序调用自身的编程技巧称为递归,递归的主要思考方法在于:把大事化小

示例1:输入一个整数值(无符号),按照顺序打印它的每一位

相关知识点补充:%d打印有符合整数(有正负数)  %u打印无符号整数

(2)递归的两个必要条件                                                                                                                   当函数调用自身时,容易出现栈溢出:每次函数调用都会在栈区中申请空间,当空间申请过多超过栈区可用空间时就会栈溢出,这时就需要递归的两个条件来约束:                                            ①存在限制条件,当满足这个限制条件的时候,递归将不再继续。                                                  ②每次递归调用后越来越接近这个限制条件。                                                                                     (如何其中一个不满足时,会出现栈溢出的错误)
示例2:编写函数不允许创建临时变量,求字符串长度(模拟strlen函数)

(3)递归与迭代(非递归)

示例3:求n的阶乘(不考虑溢出)

示例4:求第n个斐波那契数
斐波那契数规则:f(n)
1.n = 1, 2时,f(n) = 1;
2.n > 2时,f(n) = f(n - 1) + f(n - 2);

但是这个函数在使用时会出现一个问题——数过大时返回速度较慢且返回值不准确
当用递归时出现死循环或是(死递归)一直开辟栈空间最终产生栈空间耗尽的情况,也就是栈溢出,如何解决?
a.将递归改成非递归(迭代)
b.使用static对象代替nonstatic局部对象,可以减少每次递归调用和返回时产生和释放nonstatic对象的开销,且static对象可以保存递归调用的中间状态为各个调用层所用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值