• 首页
  • 江苏计算机等级考试
  • 全国计算机等级考试
2010秋江苏省计算机等考时间:2010年10月16日 全国计算机等级考试时间:2010年9月18日
南师大老师教你如何做递归题目

源程序:
option base 1
private sub command1_click()
  dim a
  a=array(1,1,1,1)
  call sub1(a,4)
  for i =1 to 4
      print a(i)
  next i
end sub

public sub sub1(x,n)
  if n>1 then
     for i=1 to n
        x(n)=x(n)+1
        call sub1(x,n-1)
     next i
  end if
end sub

运行结果:
1
25
13
5

分析:
1、程序从按钮的单击事件开始运行,先给动态数组a赋初值{1,1,1,1},然后调用子程序sub1来改变数组a的内容,最后输出改变后的数组值.
2、此题重点在于子程序sub1中包含递归调用,即自己调用自己,所以在计算时要特别小心,一是要注意n的条件,二是要注意循环次数,三是要注意数组值的变化;其实在计算时可以看出来是有规律的。
首先:sub1(x,4) :n=4(n>1),for循环要执行4次,每次执行时x(4)的值加1,所以x(4)最后的值为1+4*1=5,同时要调用sub1(x,3)4次,每次结果一样,所以只要求出一次的值,再乘4即可。
其次:sub1(x,3):n=3(n>1),for循环要执行3次,每次执行时x(3)的值加1,所以对于求一次sub1(x,3)结果为在原结果值上加3,而一共要调用4次,所以最后x(3)的值为1+3*4=13;同时要调用sub1(x,2)3次,每次结果一样,也只需要求出一次的值便可以求出最后值;
最后:sub1(x,2):n=2(n>1),for循环要执行2次,每次执行时x(2)的值加1,所以对于求一次sub1(x,2)结果是在原值上加2,而一共要调用4*3次(想想为什么?),所以x(2)最后的值为1+4*3*2=25;
x(1)=1(因为n=1,不满足条件,所以值保持不变)
所以最后结果为{1,25,13,5}

合作专区  
教育部 教育厅 江苏教育考试院 江苏教育电视台 江苏教育在线 江苏省计算机等级考试网 时代教育网
南京大学教务处 东南大学教务处 南京师范大学教务处 南京工业大学教务处 南京审计学院教务处 南京财经大学教务处 河海大学教务处 南京理工大学教务处 南京晓庄学院教务处 南京农业大学教务处 南京医科大学教务处 南通大学教务处 苏州大学教务处 南京信息工程教务处 中国药科大学教务处