day06_01参数传递递归
来源:互联网 发布:双鱼玉佩 知乎 编辑:程序博客网 时间:2024/06/05 15:09
参数传递:Java中参数的传递(此处存有争议,焦点是值传递和引用传递),此部分内容按照数据类型来分为值传递和引用传递
如果参数时基本数据类型,称之为值传递,传递过去的是值的拷贝,无论怎么改变这个拷贝,原值不会改变
public class TestParamValue {
public static void main(String[] args) {
int num = 3;
System.out.println("Before change, num = " + num);
changeData(n);
System.out.println("After changeData(n), num= " + num);
}
public static void changeData(int n) {
n = 10;
}
}
结果:3
3
public class TestParamValue2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello ");
System.out.println("before change sb="+sb);
change(sb);
System.out.println("after change sb = "+sb);
}
public static void change(StringBuffer s){
s.append("world");
}
}
结果:
Before change,num=Hello
StringBuffer sb = new StringBuffer("Hello ");
System.out.println("before change sb="+sb);
change(sb);
System.out.println("after change sb = "+sb);
}
public static void change(StringBuffer s){
s = new StringBuffer("hi ");
s.append("world");
}
}
结果:
Before change,num=Hello
例子:package com.test;
public class Fbs {
static int f(int num)
{
//assert(num >= 0);
if(num==0||num==1)
{
return num;
}
return f(num-1)+f(num-2);
}
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
int num=f(i);
System.out.println(num);
}
}
}
如果参数时基本数据类型,称之为值传递,传递过去的是值的拷贝,无论怎么改变这个拷贝,原值不会改变
public class TestParamValue {
public static void main(String[] args) {
int num = 3;
System.out.println("Before change, num = " + num);
changeData(n);
System.out.println("After changeData(n), num= " + num);
}
public static void changeData(int n) {
n = 10;
}
}
结果:3
3
public class TestParamValue2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello ");
System.out.println("before change sb="+sb);
change(sb);
System.out.println("after change sb = "+sb);
}
public static void change(StringBuffer s){
s.append("world");
}
}
结果:
Before change,num=Hello
After changeData(n), num= Hello World
public class TestParamValue3{
public static void main(String[] args) {StringBuffer sb = new StringBuffer("Hello ");
System.out.println("before change sb="+sb);
change(sb);
System.out.println("after change sb = "+sb);
}
public static void change(StringBuffer s){
s = new StringBuffer("hi ");
s.append("world");
}
}
结果:
Before change,num=Hello
After changeData(n), num= Hello
递归调用
1递归就是在过程或函数里调用自身
2在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口
3递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序
4在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序
例子:package com.test;
public class Fbs {
static int f(int num)
{
//assert(num >= 0);
if(num==0||num==1)
{
return num;
}
return f(num-1)+f(num-2);
}
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
int num=f(i);
System.out.println(num);
}
}
}
阅读全文
0 0
- day06_01参数传递递归
- Make递归调用之参数传递
- 从二叉排序树种看递归参数的传递
- C++之递归函数的参数传递问题
- 参数传递sys.argv, 文件递归搜索os.walk
- 【JavaScript】函数的参数传递和递归调用
- 不同的参数传递方式对递归函数递归深度的影响
- 参数传递
- 参数传递
- 参数传递
- 传递参数
- 参数传递
- 参数传递
- 参数传递
- 传递参数
- 参数传递
- 参数传递
- 参数传递
- 数据库存中文变成问号
- Activity与Fragment的适用性
- Android中ToggleButton,Switch,SeekBar,RatingBar的一些用法
- Python——range用法
- Android recovery.img 支持adb shell
- day06_01参数传递递归
- 初步体会数学在编程中的运用
- 第三章:3.6 使用 Cookie ( 存储到本地终端上面的数据)
- Akuna Capital interview
- 必学!Linux运维123
- Mac下Eclipse Java快捷键汇总
- linux 查看防火墙是否开启
- 第七届福建省赛 7/10
- 二分法求方程根--C语言