本周的学习我认为可以分为两个个部分,方法和递归。

很多同学面对问题无从下手,不知道如何解决问题或者怎么找到问题的突破点,说到底是练的太少,自信心不够,面对这个问题只有不断的练习,多读别人的源代码,不断的进行分析总结,才能在面对问题是找到突破点。不要忘记写程序的四部曲,首先用自然语言描述程序的设计思路,第二步,画程序流程图。第三步,撰写伪代码。第四步,实验后总结。有了一定的方法会让编程事半功倍。

    方法,方法是类中最重要的成员,在数学函数中,因为是静态方法,所以可以用类名.函数名的方法直接调用。自己编写方法时,只需编写一个类,然后为其编写申明为public的函数即可,语法格式为:

访问权限[static]返回值类型 方法名(参数列表)

{

  语句……

}

返回值:

return 表达式;

还有就是方法重载,1,方法名不同;2,参数类型不同,参数个数不同,参数类型的顺序不同。满足以上的两个或多个方法,构成重载关系。

 

递归,递归简单来说就是自己调用自己,递归的开头一定是一个判断递归结束条件是否满足的语句,函数体中至少有一句是自己调用自己的,还有就是每个递归函数中一定要有一个控制递归可以结束的变量。递归是一种很重要的思想,计算机中很多算法的实现都是依靠递归来完成的,所以要多练习,逐步掌握应用递归解决问题的方法。

 

课后实验部分均用到了递归,第一个用阶乘来解决组合数的问题解决起来比较简单,编写一个函数用循环结构求出数的阶乘,然后编写组合数公式函数,调用阶乘函数即可求出结果。主要是第三种方法,用递归求组合数,现在考虑从前n个数中选择k个,那么有两种情况:

1. 第n个数选进去,那么就是从剩下的n-1个数中选择k-1个,再加上第n个组成;

2. 第n个数不选进去,那么就是直接从n-1个数中选择k个。

组合数就是这两种情况的加和。

这样解决起来就简单很多。

汉诺塔问题是递归里的经典问题,我们把n个盘子从A柱移动至C柱

那么这个问题可以表示为:

Hanio(n,A,B,C);

该问题可以分解成以下子问题:

第一步:将n-1个盘子从A柱移动至B柱(借助C柱为过渡柱)

第二步:将A柱底下最大的盘子移动至C柱

第三步:将B柱的n-1个盘子移至C柱(借助A柱为过渡柱)

最后可以发现,n个盘子,移动的总步数为2的n次-1。

最后一个是递归解决回文字符串,回文字符串即类似于12321这样的形式,通过观察可以知道,一个回文字符串其中内部也是回文。所以,我们只需要以去掉两端的字符的形式一层层检查,每一次的检查都去掉了两个字符,当去掉两端字符后的字符串,其产生的新问题同样是检查这个字符串是否回文,又回到了递归的问题,所以,只要思路清晰,问题解决起来也会变得容易。

posted on 2017-10-14 07:54  江槐  阅读(112)  评论(0编辑  收藏  举报