函数递归的总结回顾

本文探讨了函数递归的两个关键要素:限定条件和自调位置,通过实例解释了它们如何影响函数逻辑。同时,对比了递归与迭代的区别,强调了递归可能导致的栈溢出问题,并以青蛙跳台阶问题为例,揭示递归在实际问题中的应用和优化需求。
摘要由CSDN通过智能技术生成

函数递归的本质就是其名字——递与归。先递出去, 再收回来。

而递归的思想就是为了让一个复杂的问题变成一个简单的问题

按照我目前的理解,函数递归有两点很重要。一个是它的限定条件,另一个就是函数体内“自调”(就是自我调用语句,这里我叫它“自调”)的位置。

递归的逻辑问题

限定条件很好理解,一个函数递归,如果没有限定条件,将会陷入死递归。

而“自调”的位置对于整体的函数逻辑有巨大的影响。为了能够更加理解这种影响,我在这里放上一个例子:

这两张图分别是printf 在“自调”前后的运行图。可以看到结果有很大的差异。原因就是因为逻辑问题,下面是这两个程序的逻辑图 

这是printf在“自调”语句后的逻辑

这是printf在“自调”语句前的逻辑

 

 两个的函数逻辑有差异,导致最后打印的结果完全不同。

其实,在函数递归中,在“自调”语句之前的句子在“递出去”的部分执行,按照从外向内的顺序执行逻辑执行。而在“自调”语句之后的句子在“收回来”的部分执行,按照从内向外的执行逻辑执行。

这就是我理解的递归函数逻辑问题。

递归与迭代

什么是迭代?

迭代与递归是不同的。递归就像套娃,一层一层的。而迭代就是所谓的循环。

递归因为是函数进行层层调用,而函数的调用需要开辟栈帧空间。所以虽然递归相对来说写起来很简便,但是递归的开销是大于迭代的,如果递归的程度很深,那么更是容易造成栈溢出的现象。比如斐波那契数列就不便于使用递归。假如我们给一个计数器,用来计算一共的函数调用的次数:

可以看到,当n为40时,函数就已经被调用了2亿多次。 这个数字太大了,而如果使用迭代来计算,就少之又少了。 

所以, 有的问题看似可以使用递归进行简化,但其实递归并不可取,需要仔细分析。

青蛙跳台阶问题

一只青蛙跳台阶,每次只能跳一阶或者两阶,请问想要跳到n阶,青蛙有几种跳法?

这个问题就是斐波那契问题。

如图,想要跳到第n阶,那么有两种可能,一种是从第n - 2阶跳两阶到n, 一种是从n - 1阶跳一阶到n。

假设跳到n阶有fn种方法,则跳到n - 2阶就有f n-2种方法。跳到n - 1阶就有f n-1种方法

那么青蛙跳到第n 阶就有f n = f n-1 + f n-2种方法。

由此可以知道,这是一个斐波那契数列问题。

代码如下:

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值