递归算法


基本思想:

递归算法一般用于将较为复杂的规模较大的问题分解成规模较小的同类问题,通过函数或子过程直接或间接调用自身,以小规模问题解决复杂问题,使复杂问题简单化,使程序更加简洁,是解决很多计算问题的常用方法。递归算法程序代码简单,难点主要在递归模型的构建,即递归参数的寻找、递归出口的设计以及递归函数的调用等。由于递归函数的调用是通过栈空间实现的,过深的递归调用和不当的递归出口都容易造成栈溢出和超时问题,使用时需注意。下面以第39级台阶为例体会递归的运用:

第39级台阶:

题目描述:

小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

站在台阶前,他突然又想着一个问题:

如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?

输出格式:

输出一个整数

程序分析:

首先找到问题的核心,将无用的条件抛掉,该题目可以简化为:共走偶数步,每次只走1或2个台阶,总共走39级台阶,求有几种走法。本问题可构建一个类似于二叉树的模型,每一步都分两种情况,走1个或2个。由题目限制条件容易看出走至第39个台阶时,只能有从第37级台阶走了2个台阶或从第38级台阶走了1个台阶这两种走法,则到第39台阶的走法=到第37级走法+到第38走法,以此类推……

程序设计:

因为本题共两个限制条件,在此处中我将递归参数设为剩余台阶数和已经走过的步数,可根据需要设为其他的参数。

public class TaiJie {/* n——剩余台阶数* x——走的步数     */static int f(int n,int x){//递归出口if(n==1){if(x%2==0)return 0;return 1;}if(n==2)return 1;return f(n-1,x+1)+f(n-2,x+1);}public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(f(39,0));}
}

根据程序分析可将递归调用方式设为:

               return  f(n-1,x+1)+f(n-2,x+1);

    参数的出口设置需注意避免栈溢出,当n=3时,若直接return上式,则栈中需要有参数n=2和n=1的情况,若没有则溢出,同理,当n=2时栈中需要有n=1和n=0的情况所以为防止出现栈溢出。因此不妨就将n=1和n=2设为出口。设置出口时就要考虑本题的另一个限制条件总步数为偶数步,当n=2时容易看出无论当前已经走了奇数步或者偶数步,剩余的两步都有且只有一种解法,所以可以直接将n=2时赋值为2;当n=1时则要分两种情况考虑,若已经走了奇数步,则有满足条件的1个解,return 1,若已经走了偶数步说明此种走法不合题意,return 0。

递归算法—第39级台阶相关推荐

  1. 第39级台阶问题(递归算法)

    题目如下 小明刚刚看完电影<第39级台阶>.离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚,然后 ...

  2. 【蓝桥java】递归基础之39级台阶

    题目: 小明刚刚看完电影<第39级台阶>.离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚,然后左 ...

  3. 第39级台阶(暴力搜索)

    小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚,然后左右交替, ...

  4. 第三届蓝桥杯省赛---第39级台阶

    第39级台阶 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚, ...

  5. 第 39 级台阶 蓝桥杯

    题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 小明刚刚看完电影<第 39 级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是 39 级! 站在 ...

  6. 第39级台阶 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

    package org.bluebridge.topics;/** 第39级台阶小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然 ...

  7. java39阶台阶_第四届蓝桥杯javaC组_第39级台阶

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  8. 第39级台阶(dp)

    3.题目标题: 第39级台阶(满分8分) 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈 ...

  9. 高斯日记、猜年龄、世纪末的星期、排他平方数、马虎的算式、振兴中华、组素数、第39级台阶

    高斯日记 题目 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后 ...

最新文章

  1. 说了这么多次 I/O,可你知道其中的原理么
  2. ajaxbootstrap
  3. 创建 WPF 不规则窗口
  4. 通过浪潮AIStation实现细粒度高性能的GPU资源共享
  5. Python学习中出现的一些问题
  6. mysql group by cube_SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
  7. 计算机应用基础2016高起专,2016年秋季《计算机应用基础(高起专)》期末考核
  8. 如何在Premiere Pro 中使用动态图形模板
  9. CSS变量(自定义属性)实践指南
  10. 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
  11. 【小程序】零基础微信小程序开发+实战项目
  12. Windows系统远程连接Linux系统操作
  13. 一本通1348:城市公交网建设问题
  14. 超级壁纸android,【教程】MIUI最新超级壁纸安卓全机型安装指南
  15. 把妹导论第二版(Hunting-Girls Introduction II)
  16. CocosCreator入门
  17. 雨伤php,【星月】伤雨(散文)
  18. 清理本地网络缓存的cmd命令
  19. 点云格式解读LAS/PCD
  20. ImageJ自动批量多通道单细胞荧光测量

热门文章

  1. OpenCV图像处理——图像平滑
  2. python 遍历_python-遍历numpy数组
  3. Faster R-CNN画PR曲线
  4. D661-4495E
  5. 【目标检测】|ECCV2020-HCE-全局Roi Align目标检测网络 | Hierarchical Context Embedding for Region-based Object Detec
  6. OpenCV-矩阵归一化cv::normalize
  7. 用python画lgx的图_【Python科学计算】matplotlib——python画图
  8. 面试基础整理(一)---Java中==和equals的区别
  9. eclipse下32位swt安装
  10. Mac安装和配置Maven