c语言递归法1 2 n,递归法_C语言递归法_递归算法经典实例(2)
在网上搜索梵塔游戏fanta.exe,自己动手,体会梵塔问题,尝试解决问题。
3
问题分析
教师提出问题:
1. 盘子移动过程中的两个要求?
2. 寻找规律:(教师引导,学生描述移动过程)
(1)两个盘子怎么移动?
(2)N 个盘子怎么移动?(可将上面的n-1个盘子“捆”在一起当作一个小盘)
(3)通过(2)步操作,将n个盘子的移动简化为n-1个盘子的移动,这样如此下去,每次减少一个盘子,直到只剩一个盘子为止。
学生回答:
1.(1)每次只能移动一个盘
(2)一个柱子上不能大盘放到下盘下。
2.(1)move(2,a,b,c)分三步:
1号盘从a移至b move 1:a→b
2号盘从a移至c move 1:a→c
1号盘从b移至c move 1:b→c
(2)可以描述为:
move(n-1,a,c,b)
n : a→c
move(n-1,b,a,c)
10
算法描述
师生共同完成算法描述:(难度较大)
递归的边界是无盘可移,即n=0。其移动过程的算法可描述如下:
Move(n,a,b,c)
① if n=0 推出程序
② 调用move(n-1,a,c,b)
③ 输出“盘号 柱号→柱号”
④ 调用 move(n-1,b,a,c)
7
编程实现
师生共同完成程序编写:
上述描述写成Java代码:
//利用递归定义move()方法
Static void move(int n,Sring a,String b,String c)
{
If(n!=0)
{
Move(n-1,a,c,b); //将n-1个盘从a经c移至b
System.out.println(n+”: ”+a+” →”+c); //输出移动过程:将n号盘从a移至c
K=k+1;
Move(n-1,b,a,c);
}
}
完整程序,参照课本132页。
8
教师总结
使用递归算法可以方便的解决很多实际问题,当遇到复杂问题时,我们可以通过判断问题是否能分解为若干相同性质的小问题和是否有明确的结束条件来判断是否适合用递归法来解决问题。
熟练掌握递归法解决问题的关键,在于能否准确从问题中提炼出递归函数关系式和找到递归出口。
通过本节课的学习,我们要学会把复杂的问题简单、抽象,建构合理的递归函数解决我们日常生活的实际问题。
5
八、关键环节提炼
1.问题分析(年龄问题)
通过师生互动,明确递归调用必须要有递归结束条件(递归出口),通过学生自己总结递归函数关系式,提高学生分析问题,解决问题能力,进而掌握适合递归方法解决问题的两个条件,实现教学重点的突破。
2.温故知新(斐波纳契函数/兔子繁殖问题)
不满一个月的为小兔子,满一个月不满两个月的为中兔子,满3个月以上的为老兔子
第几个月
小兔子对数
中兔子对数
老兔子对数
兔子总数
1
1
0
0
1
2
0
1
0
1
3
1
0
1
2
4
1
1
1
3
5
2
1
2
5
6
3
2
3
8
7
5
3
5
13
…
…
…
…
…
通过问题分析,归纳递归函数表达式,进一步培养和提升学生的分析、归纳、总结、解决问题的能力,使学生掌握正确的应用递归法分析、解决实际问题的能力,实现教学难点的突破。
Public class Fibonacci
{
Static int fib(int n)
{ if (n<=2)
① ;
Else
② ;
}
Public static void main(String args[])
{ System.out.println(“fib(20)=”+fib(20);)
}
}
限于我校学生编程水平有限,所以通过填写程序来温习上节课学习重点,即递归出口和递归关系表达式。
九、教学反思
本节内容通过探讨一些生活中的具体问题解决方法(年龄问题、兔子繁殖问题),使学生比较轻松的接受了递归算法的概念,进一步理解了递归算法的使用条件,知道递归算法的设计步骤;能够对提出的问题进行分析判断,是否适合使用递归法来解决,并能从中归纳总结出递归函数关系式、找到递归出口。本节课通过教师讲授、师生互动、学生分组讨论,充分调动了学生主动探索学习的积极性,能主动地与他人进行合作、交流,形成了一种和谐、积极参与的教学气氛。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-25299-2.html
c语言递归法1 2 n,递归法_C语言递归法_递归算法经典实例(2)相关推荐
- 递归Java_Java递归算法经典实例
原标题:Java递归算法经典实例 简单递归定义 什么叫递归?(先定义一个比较简单的说法,为了理解,不一定对) 递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候, ...
- java古典兔子问题c语言,Java递归算法经典实例(经典兔子问题)
Java递归算法经典实例(经典兔子问题) 题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思 ...
- c语言链表查找的代码与题目,链表的C语言实现之单链表的查找运算_c语言
建立了一个单链表之后,如果要进行一些如插入.删除等操作该怎么办?所以还须掌握一些单链表的基本算法,来实现这些操作.单链表的基本运算包括:查找.插入和删除.下面我们就一一介绍这三种基本运算的算法,并结合 ...
- java递归算法经典实例_Java实现简单的递归操作方法实例
前言 在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的 ...
- 006-高级语言程序设计C 第六章,高级语言程序设计_C语言(第六章 数组.ppt
<高级语言程序设计_C语言(第六章 数组.ppt>由会员分享,可在线阅读,更多相关<高级语言程序设计_C语言(第六章 数组.ppt(30页珍藏版)>请在人人文库网上搜索. 1. ...
- c语言程序设计第4版pdf荣政_C语言程序设计(第4版) (史蒂芬.寇肯) 中文pdf扫描版[82MB]...
C语言程序设计(第4版)全面介绍了C语言的各种特性,包括C11中增加的内容.书中包含大量完整的示例及详细的讲解.无论是否拥有编程经验,你都可以通过本书透彻地理解C语言.每章最后附有习题,便于课堂学习或 ...
- c语言3到7位水仙花数流程图_C语言入门基础整理
学习计算机技术,C语言可以说是必备的,他已经成为现在计算机行业人学习必备的,而且应用也是十分的广泛,今天就来看看拥有几年c语言工作经验的大神整理的C语言入门基础知识,没有学不会,只有不肯学. 结构化程 ...
- c语言程序设计第五版李丽娟_c语言程序设计第五版习题答案
习题解析与答案 第 1 章 C 语言概述 一. 简答题 1 .概述 C 语言的主要特点. [解答] ( 1 )语言简洁.紧凑,使用方便.灵活. ( 2 )数据类型丰富,表达能力强. ( 3 )运算符多 ...
- nec c语言笔试题,红外NEC编码发射程序_C语言(国外英文资料).doc
红外NEC编码发射程序_C语言(国外英文资料) 红外NEC编码发射程序_C语言(国外英文资料) * * * * * * * Hardware platform: homemade infrared d ...
最新文章
- 凤凰网广告包装的js
- Python中的eval--字符串解析
- 数跑科技联合阿里云创造基于云原生的无边界数字新体验
- Scala入门到精通——第十节 Scala类层次结构、Traits初步
- 软件开发的MVC构架
- pythonsocket中tcp通信接收不到数据_TCP 为什么三次握手而不是两次握手(正解版)...
- mysql注入 xfkxfk_WSS最新版多处SQL注入直接获取数据三(官方demo演示及快速定位漏洞技巧)...
- 使用 .NET 平台,如何玩转 Universal Windows 应用?
- Windows Azure AppFabric 入门教学(七):多播(Multicast)
- 数据结构笔记(三十)-- 查找的基本概念和相关的顺序查找
- 如何在github上找到自己想要的代码_如何在 GitHub 上找到免费且实用的软件?
- Java技术栈思维导图
- VNC远程控制软件,五大容易上手的VNC远程控制软件
- 基础了解虚拟 DOM
- QML类型:Window
- 编程之美4.7蚂蚁爬杆扩展问题附猎人抓狐狸(必胜策略)
- nodejs获取当前连接的网络ip
- Mybatis自定义轻量级分页组件(易集成,易拓展)
- 这次,在人工智能面前,人类输得一败涂地
- insmod: error inserting 'vivi.ko': -1 Unknown symbol in module 问题解决办法