Java基础之递归和方法重载学习

                                      学习心得

一、专业课

      1、类结构

            1)      类 = 成员变量+方法 (属性和行为 (方法/函数))

               1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private                甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用

                     2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型                        指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使              用 return 语句返回值

                     3、 方法名:定义的方法的名字,必须使用合法的标识符

                     4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,              每个参数由参数类型和参数名组成,以空格隔开。

            2)  变量,按位置划分

                     成员变量

                  局部变量

                  int a; //成员变量,有默认值,可以直接调用

                          publicstatic void main(String[] args) {

                          intb; //局部变量,需要赋值才可以使用,不然系统不知道这是什么值

                          doubled = 8.0;   //实际参数  实参

                          fun(d);

                          }

                          //形式参数,新参

                          publicstatic double fun(double d) {

                          returnd;

                          }

      

          3)  方法重载

               1.同一个类中,方法名相同(返回类型一致)

                  2.参数不同,顺序不同,数量不同

            4)     递归,方法本身调用方法本身

               1.避免死循环,提供出口

               //求一个数的阶乘

                          publicstatic int  fun(int n) {

                          //递归出口

                          if(1 == n) {

                          return1;

                          }

                          returnn*fun(n-1);

                          }

          5) 类的创建

                  构造方法

                  1.与类名一致,没有返回值,也没有void

                  6)注意   需要传多个参数时,可以用可变参数fun(int... is)(多个参数时,可变            参数一定放在最后) 

      2、算法题

            1)//欧几里德 求最大公约数 :较小的数与两个数的余数的公约数

        

                  public static int getMeasure(inta,int b) {

              //保证a小

              if(a>b) {

                     a= a^b;

                     b= a^b;

                     a= a^b;

              }

              if(b%a == 0) {

                     returna;

              }else{

                     returngetMeasure(a, b%a);

              }

              }

              2)围圈报数

                  /* 功能说明:1、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退               出圈子,

                 *问最后留下的是原来第几号的那位。*/

 

                  publicstatic void main(String[] args) {

                   Scanner input = new Scanner(System.in);

                  System.out.print("请输入总人数:");

                   int p = input.nextInt();

                  /****初始化人员 ***/

                   boolean[] per = new boolean[p];// boolean数组表示站成一圈的人,false表示退出

                  for(int i = 0; i < per.length; i++) {

                  per[i]= true;

                  }

                   /**** 报号 ***/

                  intt = 0, len = per.length;

                  while(len > 1) {

                  for(int i = 0; i < per.length; i++) {

                   if (per[i]) {

                  t++;

                  if(t == 3) {

                  t= 0;

                  per[i]= false;

                   len--;

                  }

                 }

             }

         }

二、小组PK

     1、我方题目

       1、台阶问题。 楼梯有N阶,上楼可以一步上一价,也可以一次上二阶。编一个程序, 计算共有多少种不同的走法。

       (递归方法)

       publicclass Test {

 

       publicstatic void main(String[] args) {

 

              intn = 40;

 

              System.out.println(T(n));

 

       }

 

       publicstatic int T(int n) {

 

              if(n < 1) {

 

                     System.out.println("无效参数");

 

                     return-1;

 

              }

 

              elseif (n == 1)

 

                     return1;

 

              elseif (n == 2)

 

                     return____________________;

 

              else

 

                     return____________________;

 

       }

 

       }

 

       答案:

       2

       T(n-1)+T(n-2)

 

 

 

       2、 趣味问题——猴子吃桃。海滩上有一堆桃子,五只猴子来分。第一只猴子把这  堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二    只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿      走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

 

       代码:

       classProgram

       {

      public static void Main(string[] args)

       {

          

          System.out.println(PeachNumber(5));

       

       }

 

      public static int PeachNumber(int n)

       {

           if (n == 1)

           {

                return ______________________;

           }

           else

           {

               return _______________________;

           }

      }

 

       答案

       6

       PeachNumber(n-1)*5+1

 

 

 

       3.程序运行结果是:(请注意输出格式)

       publicclass Test {

 

       publicstatic void main(String[] args) {

              inti = 6;

              intd = 8;

              getSum(i,d);

       }

 

       publicstatic void getSum(int i, double d) {

 

              System.out.println(i+++ ":" + d);

 

       }

 

       publicstatic void getSum(int d, int i) {

 

              System.out.println(i+++ ":" + d);

 

       }

 

       publicstatic void getSum(int... is) {

              for(int i : is) {

                     System.out.println(i);

              }

       }

 

       }

 

 

       答案:

       8:6

 

       编程实现汉诺塔问题:(程序补全)

       大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞     着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一    根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个      圆盘

 

       publicclass Ham {

      

       publicstatic void move(int num,char p1,char p2,char p3){

              if(num== 1){

                     System.out.println("盘子从"+p1+"移到"+p3);

              }else{

                     ________________________;

                     ________________________;

                     ________________________;

                    

              }

       }

 

       publicstatic void main(String[] args) {

 

              move(64,'a','b','c');

       }

 

       }

 

       答案

       move(num-1,p1,p3,p2);

       System.out.println("盘子从"+p1+"移到"+p3);

       move(num-1,p2,p1,p3);

 

       5.程序运行结果是:

       publicclass Class04 {

 

       publicstatic void main(String[] args) {

              intx = 2;

              inty = 4;

              Zz = new Z();

              z.f(x,y);

              System.out.println("x:"+x+"____y:"+y);

       }

      

       }

 

       classZ{

      

       publicvoid f(int x, int y) {

              x= x + 1;

              y= y + 1;

              System.out.println("x:"+x+"____y:"+y);

       }

      

       }

       答案

       35

       24

       2、对方题目

    class Problem{

        

         publicstatic void main(String[] args) {

                  Problemp = new Problem();

                  inta = 3;

                  byteb = 5;

                  b+= 2;

                  p.fun(b,a);

         }

        

         publicvoid fun(int a ,int b ){

                System.out.println("1");         

         }

        

         publicvoid fun(int a,byte b){

                System.out.println("2");

         }

        

         publicvoid fun(byte b,int a){

                System.out.println("3");

         }

 

         publicvoid fun(int b,int a){

                System.out.println("4");

         }

        

        

         }

         以上程序  编译能否通过?

         若能  写出结果;

         若不能   说出原因

 

         不能   方法重载中 参数列表不同:1 参数个数

         2参数类型

         3参数顺序   在参数个数相同时 这个顺序是指不同类型参数的顺序   类型相同  编译不能够通过

 

         2

         publicstatic void test(){

                 

                  bytec = 1;

                  inta = b = 2;

                  b= c;

                  if(a>b){

                          a= a^b;

                          b= a^b;

                          a= a^b;

                  }

                  System.out.println("a="+a+"b="+b);

         }

        

         publicstatic void main(String[] args) {

                  test();

 

         }

         以上程序  编译能否通过?

         若能  写出结果;

         若不能   说出原因

 

         不能,因为b并没有被声明,所以无法被赋值,编译不通过。

                 

         3

         publicclass Demo3 {

        

         publicstatic void main(String[] args) {

                  inti=0;

                  for(fun('A');fun('B')&&i<2;fun('C')){

                          i++;

                          fun('D');

                         

                  }

                 

         }

         publicstatic boolean fun(char c){

                  System.out.print(c);

                  returntrue;

         }

        

        

         }

         以上程序  编译能否通过?

         若能  写出结果;

         若不能   说出原因

 

         ABDCBDCB

 

         4

         递归算法实现:字符串反转;

 

 

         publicString reserve(String s ){

                  if(s.length()<=1)

                      return s;

                   return reserve(s.substring(1))+s.charAt(0);          

         }

 

         5

 

         publicclass Test {

         staticint data;

         publicint method(){  

                  returndata++;

         }

        

         publicstatic void main(String[] args) {

                  Testt1 = new Test();

                  Testt2 = new Test();

                  Testt3 = new Test();

                  t1.method();

                  t2.method();               

                  data= t3.method();

                  System.out.println(data);

                 

         }

         }

 

         2

 

   学习心得:

   1.做题前得定好规则,规则是判断题目对错的一部分,必不可少

 

 

 

 

 

 

品读

                                         2017年3月14日

             

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值