您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

递归(粗略解) [源码交易平台]

  • 时间:2022-09-01 01:29 编辑: 来源: 阅读:310
  • 扫一扫,手机访问
摘要:递归(粗略解) [源码交易平台]
递归,简单理解的话,可以说不难。这是一个递出去又拿回来的过程。从现实生活中举个例子:周末你带女朋友去看电影,她女朋友问你,我们现在坐第几排?电影院太暗了,看不清也数不清。你现在要做什么?别忘了你是程序员,这个难不倒你,递归就派上用场了。 所以你问你前面的人他是哪一排,你觉得只要在他的数字上加一就知道你在哪一排了。 但是,前面的人看不清楚,他也问了前面的人。 就问第一排的人,直到他们说我在第一排,然后再把数字发回来。 直到你前面的人告诉你他在哪一排,你才知道答案。 这是递归解决问题的一个非常标准的分解过程。去的过程叫“过”,回来的过程叫“回” 基本上所有的递归问题都可以用递归公式来表示。 对于上述过程,递归程序可以写成:f(n) = f(n-1)+1。这是一个简单的递归概念,递归就是这样一个概念。 写递归程序的时候,一定要注意终止条件。 下面是一个递归程序的模板:public void recurr (int level,int param) {//terminator终止条件if(level >:Max){ return;}//流程逻辑执行process(level,param);//向下钻取到下一级recurve(level+1,param);//恢复数据可能会存储少量数据}可以看到,有四个部分,分别是1:递归终止条件2:递归执行逻辑3:下一层4:数据清洗和存储(可选) 最重要的是确定递归终止条件,否则会出现无限递归,服务器会崩溃。 写递归程序的时候,我没有注意几点:1。不要做人肉递归,就是我们用人脑一步一步递归,或者画一个递归状态图。 2.找到最近重复的子问题。递归可以处理这种包含重复子问题的问题。这种重复意味着除了要求解的数据不同,它们的梳理过程是一样的。就像上面的问题,如果每个人都想知道自己的位置,那就得去问上一个人。 3.数学归纳法,这是帮我找到最近重复的子题。 我们验证第一排的人知道自己的位置,第二个人对第一个人是+1,第三个人对第二个人是+1,在第二个人的基础上,我们可以得出这样一个总公式,f(n) = f(n-1)+1,帮助我们找到最近一次重复的子问题。 那我们就拿公式f(n) = f(n-1)+1来写全递归,用上面的递归模板。 public int test(int n){//terminator if(n = = 1){ return 1;}// process// drill down返回测试(n-1)+1;}我们一起写了drill down和process,因为上一个的结果就是下一个的值。 我们来看一个小问题:如果这里有N步,你可以一次跨一步或者两步。这N步有多少种走法?如果有七个步骤,你可以像2,2,2,1,或1,2,1,1,2那样向上走。总之,走路的方式有很多种。如何通过编程找出总的路数?那也是找重复的子问题。用数学归纳法,最后一步只能是1,最后两步可以是1,1或者2。所有f(2)=2,f(1)=1,那么后三步是1,1,1;1,2;2,1,共f(3)=3。综上所述,上三级台阶,上二楼可以上1级,上一楼可以上2级。所以N步的走量等于你上了两个台阶之后n-1步的走量加上n-2步的走量。 公式是:f(n) = f(n-1)+f(n-2),那么这个程序就很容易算出来。先写出递归终止条件:int f(int n) {if (n ==1)返回1;if (n ==2)返回2;返回f(n-1)+f(n-2);}写递归程序一定要避免人肉递归,这是写不出来的。我们要做的就是把问题归纳成一个总的表达式,然后就可以很容易地写出来了。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【域名/主机/服务器|】qq邮箱提醒在哪里打开(2024-06-04 18:58)
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部