一、方法

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

public class TestMethod{
public static void main(String args[]){
m();
m1(3);
m2(2,3);
int i = m3(4,5);
System.out.println(i);
}
//以下定义的都是静态方法,静态方法可以在main()方法里面直接调用
public static void m(){
System.out.println("Hello!");
} public static void m1(int i){
if(i==5){
return;
}
System.out.println(i);
} public static void m2(int i,int j){
System.out.println(i+j);
} public static int m3(int i,int j){
return i+j;
}
}

二、变量的作用域

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

三、递归调用

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

可能很多同学还是看不懂上图的分析,下面我们来分解一下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天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?(先思考一下,再点开看分析和源代码)

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

感谢阿里云开发者社区,让我有整套系统的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. WPF客户端自动升级

    实现原理:通过一个辅助程序(更新程序.exe)比较本地版本号和服务器的版本,若服务器版本新则通过更新程序.exe下载服务器上资源(我是把最新的文件压缩成zip放到服务器上)到本地进行替换. 服务器放置 ...

  2. Java模拟UDP通信

    目录 Java基础:模拟UDP通信 1.一次发送,一次接收 1.1.发送方 1.2.接收方 2.多次发送,多次接收 2.1.发送方 2.2.接收方 3.模拟双方通信 3.1.发送方的线程 3.2.接收 ...

  3. jquery判断邮箱及密码是否输入正确的表单提交

    jquery我接触的也不是很多,基本就是照着案例然后查相关方法做出来的,基本用了大概半天的时间,手打加查资料实现.具体如下,首先下载一个jquery包,网址是https://jquery.com/do ...

  4. POI 导入excel数据自动封装成model对象--代码分析

    上完代码后,对代码进行主要的分析: 1.主要使用反射api将数数据注入javabean对象 2.代码中的日志信息级别为debug级别 3.获取ExcelImport对象后需要调用init()方法初始化 ...

  5. React:Lifting State Up

    在学习React的组件的时候,我也好奇组件间需要共享状态或通信的时候,React是如何处理的.在文档的QUICK START的提到Lifting State Up(状态提升),并不是什么新鲜东西.只是 ...

  6. MySQL 选错索引的原因?

    MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的.那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢? 先看这样一个例子: 创建表 ...

  7. EMAIL、用户名测试点

    EMAIL xxxaa@xxx.xxx 1.没有@情况,如:aa.net 2.没有.符号,如:aa@qqcom 3..后面没有字符:如 xxxaa@xxx. 4..不在@后面, 如:xxxaa.@xx ...

  8. storm-jdbc详解

    今天来说说Storm集成Jdbc是如何完成的,代码如下: 写入数据: 先来讲讲官方API: Map hikariConfigMap = Maps.newHashMap(); hikariConfigM ...

  9. sql语句 怎么从一张表中查询数据插入到另一张表中?

    sql语句 怎么从一张表中查询数据插入到另一张表中?  ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...

  10. linux -- 一般使用经验(四)

    一.使用grep进行条件筛选(主要为日志) 1.grep  -E '条件1|条件2|条件3'   文件名 (cat -n 文件.log |grep -E '2020-01-16 15:24:48|条件 ...