【时时三省】(C语言基础)函数递归

山不在高,有仙则名。水不在深,有龙则灵。

                          ——csdn时时三省

什么是递归

程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小

就是函数自己调用自己就叫做递归

示例:

37a3b3fda2f64481a6457bf843f3eae0.jpg

 这就是最简单的一种递归

1ef72d70afc045e998be8908c5679d99.jpg

换成这个就可以看一下效果 输出的话就会一直打haha 因为main函数会调用自己 括号里面的main函数也要调用 就调用到了上面的main函数 就一直这样循环 每次调用自己都会打印一次haha 

但这个代码是存在问题的 会栈溢出

示例:

43b70b3081c94a08837ac021467275c9.jpg

 这个就是一个递归代码 

从main函数进来 num是0 要输入值 比如输入个123 然后到print函数 就要去调用print函数 这个时候n就等于123 n大于9就进到print里面去 print又要调用print这个时候123/10就等于12 然后继续上面的过程 知道n=1 就不会进入if语句了 也就是说递归不再继续了 直接打印n%10结果1这个函数用完以后从哪里来到哪里去 然后继续打印n%10的结果=2然后继续循环直到回到main函数里面 就结束了 打印出来就是 1 2 3

自己调用自己的时候后面的代码是没有机会执行的 直到执行完代码还会一层一层返回来

递归的两个必要条件

•存在限制条件,当满足这个限制条件的时候,递归便不再继续。

•每次递归调用之后越来越接近这个限制条件。

if(n>9)这个条件如果不写的话会永远调用自己 会进入死循环 加个if就不会是死循环了

(n/10) 也很重要 如果不加这个 数字一直不会改变 就会一直循环下去

如果条件要循环很多次的话也不行 会栈溢出

栈溢出

有三个类型

栈区 会放(局部变量、函数的形参)

堆区 会放(动态内存分配的、malloc、free、calloc、realloc)

静态区 会放(全局变量、静态变量)

内存的栈区

每次用函数都会放在栈区里面 栈区空间被耗干了就会出现栈溢出

写递归代码的时候

1.不能死递归,都有跳出条件,每次递归逼近跳出条件

2.递归层次不能太深

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时时三省

网络乞丐,在线乞讨。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值