c- language- learning 13函数 函数递归

Thursday, March 3,2022

函数自己调自己

此时死递归

栈溢出

//练习1

 

执行到print(n/10)的时候此句代码未结束,还需要再次执行 print(),将12传入

所以它下面的printf("%d",n%10);不打印执行

 又下一层递归,此时n=1 ,if条件不满足,跳过直接打印printf("%d",n%10);

打印完1

返回上一层打印2,

返回上一层打印3,

返回上一层打印4。

循环的 print(n/10);要输出的 printf("%d",n%10);

print(1234);

print(123);4

print(12);3 4

print(1);2 3 4

//递归两个必要条件

 

 //栈溢出

 内存栈空间,递归时,每调用一次函数分配一个空间,

总会耗尽栈空间而溢出

 

 

 

 //练习2

编写函数不允许创建临时变量,求字符串的长度

求字符串的长度

 

要保证str++后能再返回去再次判断,所以if应该改为while

但题目要求为,不能创建临时变量,即不能有count

 

递归

 

 

 str+1 是下一个的地址,不是字符。所以相当于str+1为一个整体传给了下一个形参

 

 

 

 如果是str++就是错误的,留下的是新址,传过去的值是原来的值str,而不是新值str+1

//递归与迭代

迭代是重复做一件事情,而不一定是在循环,而循环是一种迭代方式

//练习3:求n的阶乘(不考虑溢出)

 

 

 

 //练习4

求第n个斐波那契数。(不考虑溢出)

前两个数之和等于第3个数

 

 一直在跑,因为这样的效率太低,一直重复大量的计算

要想计算50,那就必须知道49,48,同理,逐层往下

 

 正着求,就不用重复计算了,用循环或者迭代方式,第三个开始

 

 

 递归:效率低,栈溢出,有局限,但写出来简单

用迭代代替

 

 a与c调换,都要借助b

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值