一、方法

方法执行到return语句后,这个方法的执行就结束了,方法可以有返回值,但可以不用这个返回值。方法首先要定义,然后才能调用。

  1. public class TestMethod{
  2. public static void main(String args[]){
  3. m();
  4. m1(3);
  5. m2(2,3);
  6. int i = m3(4,5);
  7. System.out.println(i);
  8. }
  9. //以下定义的都是静态方法,静态方法可以在main()方法里面直接调用
  10. public static void m(){
  11. System.out.println("Hello!");
  12. }
  13.  
  14. public static void m1(int i){
  15. if(i==5){
  16. return;
  17. }
  18. System.out.println(i);
  19. }
  20.  
  21. public static void m2(int i,int j){
  22. System.out.println(i+j);
  23. }
  24.  
  25. public static int m3(int i,int j){
  26. return i+j;
  27. }
  28. }

二、变量的作用域

变量的作用域只在“{  }”有效,出了这个“{  }”就没有作用了

三、递归调用

递归:在一个方法内部对自身的调用就称为递归

可能很多同学还是看不懂上图的分析,下面我们来分解一下method方法这个递归函数:

首先,method(5):return  5*method(4);

这里的method(4):return  4*method(3);

接着来method(3):return  3*method(2);

紧接着method(2):return  2*method(1);

终于到了method(1):return  1;

细心的同学发现了,这是一个求阶乘的函数,这里求5!;我们从上面分析的逆向看,是不是可以得出1*2*3*4*5呢??

我们的递归函数需要从逆向思维去编写,为什么呢?

因为方法传进来的形参,就是我们的计算终止最大值;若我们从最小值1开始算,那传进来的形参是1的话,就不能设置上限值了。

因此我们的递归方法,也需要有一个计算起始和终止域。而起始域即我们方法的终止域(这里是1);终止域是我们的起始域(这里是形参);

我们再来个趣味数学题(猴子吃桃问题):

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?(先思考一下,再点开看分析和源代码)

  1. /*猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。
  2. 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
  3. 以后每天早上都吃了前一天剩的一半零一个。
  4. 到第10天早上想再吃时,见只剩下一个桃子了。
  5. 求第一天共摘了多少桃子?
  6.  
  7. 我们首先来定义几个变量:day(天数)、peach(桃子的个数)
  8. 然后分析确定的终止值:这里我们的第10天只剩下1个桃子就是我们的终止最小值;
  9. 那么我们的最大值呢??
  10. 我们的最大值根据题目可以分析得出:第day天有peach个桃子;
  11. 可能到这里有些同学就懵了。我们不妨想一下,把题目问的第一天改成第9天试试:
  12. 第9天摘了多少个桃子?
  13. 是不是(1+1)*2=4个呢?
  14. 第8天呢?
  15. 是不是(4+1)*2=10个呢?
  16. 从上面可以看出,我们要知道第8天的数量;
  17. 是不是就需要知道第9天的数量然后加1乘2就可以了
  18. 同理,我们要知道第1天的数量;
  19. 就需要知道第2天的数量然后加1乘2
  20. 既有(peach(day+1)+1)*2;
  21. */
  22.  
  23. public class MonkeyPeach{
  24. public static void main(String[] args){
  25. System.out.println(peach(1));
  26. }
  27. public static int peach(int day){
  28. if(day<1||day>10){
  29. return 0;
  30. }else if(day == 10){
  31. return 1;
  32. }else{
  33. return (peach(day+1)+1)*2;
  34. }
  35. }
  36. }

感谢阿里云开发者社区,让我有整套系统的Java学习教程

同时,感谢博客园,让我有一个免费的博客,并让我做笔记学习!!

跟着阿里学JavaDay06——Java基础语法(四)的更多相关文章

  1. 跟着阿里学JavaDay04——Java基础语法(二)

    一.Java运算符 运算符的简介 所有的程序开发,都是对数字的进行处理.而对数字的处理,一定会存在所谓的操作模式,而这些操作模式就被称为运算符. 算术运算符 对于算术运算符,我们主要掌握++,--的运 ...

  2. 跟着阿里学JavaDay07——Java基础语法(五)

    我们后面的笔记我,打算直接用程序,加注释进行记录.日后若本人有疑问,可进行网络查询加以整理回复 package com.cionda.JavaDemo.dept; public class JavaD ...

  3. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  4. 跟着阿里学JavaDay02——Java编程起步

    几乎所有语言的第一个程序都是"HelloWorld" 就像所有单片机初学者一样,点亮第一个LED灯开始 而起初我们编写/学习Java程序,都是通过记事本来编写的,这里推荐一个Edi ...

  5. 跟着阿里学JavaDay01——Java编程环境搭建

    一.下载并完成JDK的安装 我们要学习Java就需要下载JDK.因为JDK是Java的开发工具. JDK的获取可以通过官方网站下载:JDK下载地址(这里我们下载Java SE10的版本) JDK下载完 ...

  6. Java基础语法<四> 控制流程

    笔记整理 来源于<Java核心技术卷 I > <Java编程思想>   if while do while for   switch case case标签可以是: 类型为ch ...

  7. (四)Java 基础语法

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

  8. 001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学

    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学 welcome to Java World 欢迎来到Java世界 一起领略Java编程世界的奥秘与奥妙 ...

  9. 第4天 Java基础语法

    第4天 Java基础语法 今日内容介绍 流程控制语句(switch) 数组 流程控制语句 选择结构switch switch 条件语句也是一种很常用的选择语句,它和if条件语句不同,它只能针对某个表达 ...

随机推荐

  1. Day_09【常用API】扩展案例5_获取长度为5的随机字符串,字符串由随机的4个大写英文字母和1个0-9之间(包含0和9)的整数组成

    分析以下需求,并用代码实现 1.定义String getStr(char[] chs)方法 功能描述:获取长度为5的随机字符串,字符串由随机的4个大写英文字母和1个0-9之间(包含0和9)的整数组成 ...

  2. nodejs开发准备工作(2)

    (1)安装express: (2)安装好express后命令行执行express --version出现express不是内部或外部命令,也不是可运行的程序或批处理文件的问题可能是因为express4 ...

  3. STM32 串口USART DMA方式发送接收数据

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...

  4. DoNet:浅淡对delegate的理解

    1 前言 C#的相关文档,MSDN上其实已经很详细了,关于delegate的使用可以参 考MSDN上的文档https://msdn.microsoft.com/zh-cn/library/900fyy ...

  5. 自己动手在Linux系统实现一个everything程序

    大家好,我是良许. 我们知道,在 Windows 下,有一款非常实用的神器,叫作 Everything ,它可以在极短的时间里,搜索出来你所想要的文件/目录,如下图示: Linux 下也有一些类似于 ...

  6. 在Qsys中创建用户自定义IP

    在SOC FPGA的设计中,必须使用Qsys软件才能将ARM和FPGA之间的接口引入到FPGA设计中.为了设计上的方便,客户经常希望将Qsys中的一些接口信号引入到FPGA顶层设计文件中.本文以Ava ...

  7. 设计模式之GOF23代理模式03

    动态代理 public class StarHandler implements InvocationHandler{  Star realStar; public StarHandler(Star ...

  8. [csu/coj 1079]树上路径查询 LCA

    题意:询问树上从u到v的路径是否经过k 思路:把树dfs转化为有根树后,对于u,v的路径而言,设p为u,v的最近公共祖先,u到v的路径必定是可以看成两条路径的组合,u->p,v->p,这样 ...

  9. Mysql 常用函数(20)- ceiling 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html ceiling 的作用 向上取整,ceil 函数一 ...

  10. mfw

    0x01 可能为git泄露 git泄露 githack下载源码 index.php <?php if (isset($_GET['page'])) { $page = $_GET['page'] ...