跟着阿里学JavaDay06——Java基础语法(四)
一、方法
方法执行到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基础语法(四)的更多相关文章
- 跟着阿里学JavaDay04——Java基础语法(二)
一.Java运算符 运算符的简介 所有的程序开发,都是对数字的进行处理.而对数字的处理,一定会存在所谓的操作模式,而这些操作模式就被称为运算符. 算术运算符 对于算术运算符,我们主要掌握++,--的运 ...
- 跟着阿里学JavaDay07——Java基础语法(五)
我们后面的笔记我,打算直接用程序,加注释进行记录.日后若本人有疑问,可进行网络查询加以整理回复 package com.cionda.JavaDemo.dept; public class JavaD ...
- 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发
简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...
- 跟着阿里学JavaDay02——Java编程起步
几乎所有语言的第一个程序都是"HelloWorld" 就像所有单片机初学者一样,点亮第一个LED灯开始 而起初我们编写/学习Java程序,都是通过记事本来编写的,这里推荐一个Edi ...
- 跟着阿里学JavaDay01——Java编程环境搭建
一.下载并完成JDK的安装 我们要学习Java就需要下载JDK.因为JDK是Java的开发工具. JDK的获取可以通过官方网站下载:JDK下载地址(这里我们下载Java SE10的版本) JDK下载完 ...
- Java基础语法<四> 控制流程
笔记整理 来源于<Java核心技术卷 I > <Java编程思想> if while do while for switch case case标签可以是: 类型为ch ...
- (四)Java 基础语法
Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...
- 001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学
001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学 welcome to Java World 欢迎来到Java世界 一起领略Java编程世界的奥秘与奥妙 ...
- 第4天 Java基础语法
第4天 Java基础语法 今日内容介绍 流程控制语句(switch) 数组 流程控制语句 选择结构switch switch 条件语句也是一种很常用的选择语句,它和if条件语句不同,它只能针对某个表达 ...
随机推荐
- Springboot邮件发送思路分析
毕业设计里需要邮件发送,所以学习,总的来讲,我考虑以下几点, 代码量少,代码简单.配置少,一看就懂,使用 JavaMail 太麻烦了. 异步执行,添加员工之后会发送入职邮件, 多线程处理,设计里有一个 ...
- spark是怎么从RDD升级到DataFrame的?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第五篇,我们来看看DataFrame. 用过Python做过机器学习的同学对Python当中pandas当中的Data ...
- 【Hadoop离线基础总结】Yarn集群的资源调度
Yarn集群的资源调度 介绍 概述 Yarn是 Hadoop 2.x 引入的新的资源管理系统模块,主要用于管理集群当中的资源(主要是服务器的各种硬件资源,比如内存.CPU等),它不光管理硬件资源,还管 ...
- A*启发式搜索
A*启发式搜索 其实是两种搜索方法的合成( A*搜索算法 + 启发式搜索),但要真正理解A*搜索算法,还是得先从启发式搜索算法谈起. 何为启发式搜索 启发式搜索算法有点像广度优先搜索,不同的是,它会优 ...
- 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?
[摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...
- 修改托管dll文件
众所周知,托管的dll是可以反编译且可以修改的. 可以用ildasm.exe导出IL文件,修改IL文件后,用ilasm编译成DLL 用ildasm.exe导出IL文件 1.获得ildasm.exe ...
- markdown:列表、表格、代码实现
插入列表 1. dsf2. dsds 插入表格header 1 | header 2---|---row 1 col 1 | row 1 col 2row 2 col 1 | row 2 col 2 ...
- Codeforces 832D(Misha, Grisha and Underground,LCA)
题意:在一棵生成树上,给出了三个点,求三个点之间最大的相交点数,CF难度1900. 题解:求出三个lca,并取深度最大的那个,就是我们要的三岔路口K,然后分别求出K到a,b,c三点的路径长度,取最大值 ...
- 最短路径——dijkstra算法代码(c语言)
最短路径问题 看了王道的视频,感觉云里雾里的,所以写这个博客来加深理解.(希望能在12点以前写完) 一.总体思想 dijkstra算法的主要思想就是基于贪心,找出从v开始的顶点到各个点的最短路径,做法 ...
- 简单而面试中又常见的知识点:JS执行机制
在开始讲解之前,我们先来看一段代码: console.log('1'); setTimeout(function() { console.log('2'); process.nextTick( ...