“用递归算法解决问题”教学设计 第三章第五节

减小字体 增大字体 作者:免费教育文稿网  来源:eduwg.com  发布时间:2013-04-10 17:17:53

江苏省徐州市第三十六中学 陶 江 221008

一、教材分析

“用递归法解决问题”是《算法与程序设计》第三章第五节第二部分的内容,前面学习了“用解析法解决问题”、“用穷举法解决问题”、“在数组中查找数据”及“对数据进行排序”,“递归算法”的基本思想:把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。

二、学情分析

教学对象是高中二年级学生,是高中所学的最后一个算法,之前学过了程序设计的各种语句,函数、算定义函数,还学习过了“解析法”、“穷举法”等算法。

三、教学目标

1.知识与技能:

(1) 理解什么是“递归算法”,能用“递归算法”的思想分析问题;

(2) 能够应用自定义函数方法实现“递归算法”的编程。

2.过程与方法:

学生参与讨论,通过游戏过程,思考“递归算法”思想,体验“递归算法”的程序。

3.情感态度与价值观:

(1) 通过游戏中的“坚持”一词,让学生感悟“再坚持一下”的含义;

(2) 结合数学中的实例,激发学生的数学建模意识,培养学生多维度的思考问题和解决问题。

四、教学重点、难点

1.教学重点:

理解什么是“递归算法”,能用“递归算法”的思想分析问题。

2.教学难点:

应用自定义函数方法实现“递归算法”的编程。

五、教学方法

任务驱动,小组讨论,讲授法

六、课程过程

1.课堂导入

师:今天我先给大家做个游戏,老师的纸上写了一个词(坚持,在上课之前事先告诉其中的一个同学),我们班有一位同学知道写的是什么!但是他不能就这样告诉大家,有一个规则可以让我们知道内容?规则是:从第一排的第一个同学开始;每位同学只问他相邻的同学,每位同学最多只能被问一次,而且一个同学不能再问第二人,当任何一个同学知道了答案,要求立即告诉曾经问过他的那个同学,不能告诉其它同学,然后知道内容的同学,继续向前告之,以此类推;一直到第一个同学结束。

学生活动:按照游戏规则开展进行到最后。

师:请第一个同学说说是什么词?

老师展示纸上的内容(“坚持”)

师:“坚持”作为高中生的我们,每个人都对这个词感悟不同,我们生活中的任何事,都不是一帆风顺的,当遇到挫折,你是“放弃”,还是“再坚持一下”,通过自己的努力或者去寻求适当的帮助呢。在你遇到困难时,往往别人也同样感觉困难无比,“再坚持一下”,也许就会产生完全不同的结果。

2.交流探索

师:刚才的游戏,第一个同学想知道结果,就必须第二个同学知道,第二个同学想知道结果,就必须第三个同学知道,同理,一直往后进行;当有一个同学知道结果后,就逐级向前告知,一直返回到第一个同学,任务结束。这个过程就是我们今天要学习的递归算法的思想。

老师板书:递归法

师:刚才的游戏,如果想游戏结束,必须有个什么条件?

学生回答:必须有人知道纸上的内容。

师:用算法中专业的语言来说,就是必须有出口,否则就会像死循环那样,不停的算下去,最终造成死机。

师:递归法通常都是借助自定义函数来实现,函数是为了实现某种功能而编写的一段相对独立的程序,并且可以多次的调用。

老师投影:这个游戏的伪代码描述

function what(n)

if  我知道答案  then

我就告诉你

else

我要问下一位同学后再告诉你

endif

end function

3.解决问题

例题1:有一天小猴子摘若干个桃子,当即吃了一半还觉得不过瘾,又多吃了一个。第二天接着吃剩下桃子中的一半,仍觉得不过瘾又多吃了一个,以后小猴子都是吃尚存桃子一半多一个。到第10天早上小猴子再去吃桃子的时候,看到只剩下一个桃子。问小猴子第一天共摘下了多少个桃子?(猴子摘桃)

师:以小组为单位,讨论此题应该如何解决?

学生口述此题的解决方法

建立数学模型:

师:假设第n天(n<10)的桃子数为taozi(n),那么当n<10时,就有taozi(n)=?

生:(taozi(n+1)+1)*2

师:此题的出口是什么?

生:第10天的桃子数是1个。

幻灯片出示自定义函数taozi的代码:

Function taozi(ByVal n As Integer) As Integer

 If n=10 Then

    taozi=1

 Else

   taozi=(taozi(n + 1)+1) * 2

 End If

End Function

例题2:求N!

师:求N的阶乘,这是数学里的一种术语。 此题的意思是:求从1乘以2乘以3乘以4一直乘到N。

建立数学模型:

师:假设N的阶乘为ji(n),那么ji(n)=?

生:ji(n-1)*n

师:此题的出口是什么?

生:1的阶乘是1。

学生尝试进行编程

可能出现的问题是写成ji=ji(n+1)*n

师:谁来说说这两题在递归调用过程中的不同?

生:第一题出口是最后一天(第10天),要想知道第n天的桃子数,就要知道第(n+1)天的。此题的出口是第一个数的,要想知道第n个数的阶乘,就要知道第(n-1)的数的阶乘。

幻灯片出示解决此题的程序:

Function ji(n As Integer) As Integer

 If n=1 Then

  ji=1

 Else

  ji=ji(n-1)*n

 End If

End Function

Private Sub Command1_Click()

Dim n As Integer

 n =val(InputBox("请输入n"))

 Print  ji(n)

End Sub

4.课堂小结

师:我们今天所学习的算法是“递归算法”,什么是递归算法,递归算法有什么特点。

师生讨论,共同小结:

(1)递归算法是数值层层调用实现的,函数先由上向下调用,当达到最底层后,再将函数值层层向上返回。(递下去,收回来,简称:递归)

(2)必须有个结束条件(有个该收回来的条件)

(3)可读性强

(4)计算机要记忆的数据量大,对计算机的空间占用的多,内存消耗大,不适合解决数据调用次数过多的题。

5.课堂练习

(1)下面是用递归法求1+2+3+4+…+n ,请完善程序

Public Function s(n As Integer) As Long

 If n = 1 Then

  s = ____

 Else

  s = __________

 End If

End Function

Private Sub Command1_Click()

Dim n As Integer

 n = InputBox("请输入n", "求1+2+3+4+…+n")

 Print "1+2+3+4+…+" & n & "="; s(n)

End Sub

(2)斐波那契数列0、1、1、2、3、5、8、13、21、……从第三项开始,每一项都是紧挨着的前两项的和。

Public Function s(n As Integer) As Long

Select Case n

 Case 1

  s = ______

 Case 2

  s = ______

 Case Else

  s = s(n - 1) + s(n - 2)

End Select

End Function

Private Sub Command1_Click()

Dim n As Integer

 n = InputBox("请输入n", "求斐波那契数列的第n项的值")

 Print "斐波那契数列的第" & n & "项的值"; ______

End Sub

6.作业

课本P70实践

七、教学反思

以游戏的方式引入,让学生初步明白“递归算法”。通过“猴子吃桃”问题,运用游戏的思维引导学生掌握“递归算法”的解题过程,再通过N!这个简单的数学问题,加深学生用“递归算法”解决此类题的方法。最后通过两道高中水平考试的题目,一是让学生巩固所学,二是让学生明白此类试题的考点。

参考文献

《信息技术课程与教学》   李艺  高等教育出版社2006.6出版

Tags:

作者:免费教育文稿网
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论