| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java中方法的概念以及递归的讨论 -> 正文阅读 |
|
[Java知识库]Java中方法的概念以及递归的讨论 |
Java中方法的概念以及递归(汉诺塔问题)文章目录![]() 一、方法的基本使用1、方法的概念Java语言中的“方法”(Method)在其他语言当中也可能被称为“函数”(Function)。 对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到“随时任意使用”,那么就可以将这些代码放在一个大括号“{}”当中,并且起一个名字。使用代码的时候,直接找到名字调用即可。 方法存在的意义:
接下来看方法的结构: 访问修饰限定符:自由选择,告诉编译器如何调用该方法。定义了该方法的访问类型。 **静态static:**当调用的主函数是static时,被调用的函数需要为static的。例如:java中,main方法直接调用add方法。此时的add方法需要static修饰。 返回值类型 :方法可能会返回值。return Value Type 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,return Value Type 是关键字void。 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。 方法名(函数名):是方法的实际名称。方法名和参数表共同构成方法签名。 方法体:方法体包含具体的语句,定义该方法的功能。
2、实参形参的关系实参:在方法中,实际传递的数值就是实际参数。比如上面的main函数中, int c = add(a, b); 这里的a和b就是实际参数,称为实参。 形参:在被调用的方法里,由实参传递过来的数值,就称为形式参数。形参是实参的一份临时拷贝。也就是说,main函数传递的a和b,与add方法中的a和b,虽然都是10和20(上面代码中),但是二者并不是来自同一块内存空间:如下图所示: 二、方法的重载1、重载所能解决的问题在我们平常写代码中,少不了数据的加减乘除。也少不了对不同类型的数据进行四则运算。假设:我们就写了上面的代码(add方法),我们用浮点数(小数)调用add方法,会有什么情况发生? 此时大家就会想,我重新写一个double类型的方法不就行了吗。 没错,就是再次写一个double类型的add就行啦。在C语言中,我们写的函数(方法),不能够写重命的。比如,我写两个add的函数。函数名就是叫add。一模一样,在C语言中是不允许的。 但是在java中,这是可以。也就是这节所讲的 方法重载。 根据形参的类型和形参的个数,去寻找被调用的方法。 上面的代码,分别调用了add方法,虽然都叫add。但是形参类型不一样。所以是两个不同的方法。这就叫重载。 重载的规则
注:当方法的方法名相同,参数相同,但返回值类型不同的时候,这不构成重载。 三、递归的概念1、递归的概念一个方法在自己调用自己时,就称为“递归”。 当一个大问题,是由若干个小问题,并且这些小问题的解决方法,都是一样的。这样的问题,很大可能就能用递归去解决。
例如代码:
2、递归的练习1)、汉诺塔问题汉诺塔游戏(7K7K小游戏链接)。在开始讲解之前,大家还是先去玩一玩汉诺塔游戏,看看是什么规则。更容易的理解下面的代码。
情况一:我们先从1个圆盘举例说明, 我们直接从left柱,移动到right柱即可 情况二: 2个圆盘的情况 情况三: 3个圆盘的情况 这就是大致的思路:
不要去深究每一步的细节,抓好大致的思路,确定好递归终止的条件。宏观的去想这个问题,就能够很好地抓到问题的本质。
2)、青蛙跳台阶情况一:一步台阶 只能跳一次,就跳完了; 1种 情况二:两步台阶 题意是,青蛙一次可以跳一步台阶,也可以跳两步台阶。所以情况二的跳法是 2 种 情况三:三步台阶
3)、青蛙跳台阶(进阶)(递归->动态规划)看完题目,各位有什么感想??? 是不是跟初级的,区别不是很大?递归终止的条件还是一步台阶和两步台阶的情况。 情况一和情况二的情况,我们就不说了,跟上文初阶的一模一样。还是1种跳法和2种跳法;我们重点来看一下三层台阶的情况。 情况三: 三层台阶 三层台阶:也就是说青蛙一次可以跳到3层台阶。弹跳力见涨啊!(注意:并不是说,青蛙就一次只能跳3层台阶,题意是(1 ……n层中 ,每一层 它都可以一次跳过)。
那如果是 四层台阶 五层台阶 N层台阶 呢? 那是不是有几层,就有几种假设情况?那就需要相加!!!来看这个题的代码:
上面的代码,就是经典的递归方式,去解这个题。 其实,在台阶数足够大时,这样的递归,会有很多的重复计算:比如:
暴力递归 -> 动态规划:
对比两种方法: 我们画出前面几组数据,就能找出规律: 可能你就会疑惑,我写不出来这动态规划。那可以先写递归的版本。在递归的版本上去修改,加缓存。 具体是以什么形式来缓存,还得看你的可变参数,例如这个题的可变参数就只有一个n,也就是台阶数。那我们就开辟一维数组,就能解决。 那如果是两个可变参数,那么此时就可能需要二维数组来做缓存了!!! 总之,像这种考察递归的题目。我们都可以加缓存的形式。到底需不需要加缓存,我们就得看看,递归的时候,是否涉及了大量的重复计算。 最后考考大家,上面写的动态规划的版本,是否还可以优化呢???(提示一下: 两层for循环,时间复杂度O(N2)) 好啦,本期更新就到此结束了,我们下期见!!! ![]() |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 2:55:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |