java break递归_嵌套循环,break,continue,方法,和递归

一、break语句和continue语句

在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句

continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定

二、方法

方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数。

方法用于定义该类或该类的实例的行为特征和功能实现。 方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

格式:修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){

Java语句;… … …

}

对象名.方法名(实参列表)

方法的详细说明

1. 形式参数:在方法声明时用于接收外界传入的数据。

2. 实参:调用方法时实际传给方法的数据。

3. 返回值:方法在执行完毕后返还给调用它的环境的数据。

4. 返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为void

注意事项:

1. 实参的数目、数据类型和次序必须和所调用的方法声明的形式参数列表匹配。

2. return 语句终止方法的运行并指定要返回的数据。

3. Java中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本):

4. 基本类型传递的是该数据值的copy值。

5. 引用类型传递的是该对象引用的copy值,但指向的是同一个对象

三、方法重载

方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法

方法重载的条件:1.不同的含义:形参类型、形参个数、形参顺序不同

2.只有返回值不同不构成方法的重载

如:

1

int a(String str){}与 void a(String str){}

不构成方法重载

3.只有形参的名称不同,不构成方法的重载

四、递归结构

优点:递归结构可以把复杂的问题逐渐简单化,本质是“自己调用自己”

缺点:占内存,速度慢

任何使用递归的方法都可以使用迭代解决,当递归方法可以更自然地反映问题,并且

易于理解和调试,并且不强调效率问题时,可以采用递归;

在要求高性能的情况下,尽量避免使用递归。

递归举例 :

public class Test22 {

public static void main(String[] args) {

long d1 = System.currentTimeMillis();

System.out.printf("%d阶乘的结果:%s%n", 10, factorial(10));

long d2 = System.currentTimeMillis();

System.out.printf("递归费时:%s%n", d2-d1); //耗时:32ms

}

/** 求阶乘的方法*/

static long factorial(int n){

if(n==1){//递归头

return 1;

}else{//递归体

return n*factorial(n-1);//n! = n * (n-1)!

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ 回溯法解决 N 皇后问题,可以使用递归和迭代两种方法实现。 首先,我们需要定义一个二维数组表示棋盘,初始化为0表示该位置没有皇后。然后,我们从第一行开始逐行放置皇后,对于每一行,我们需要检查该行的每一列是否可以放置皇后,如果可以,则在该位置放置皇后,并递归进入下一行;如果不行,则回溯到上一行,继续尝试其他列。 1. 递归解法 ``` #include <iostream> using namespace std; const int N = 10; int ans = 0; int board[N][N]; void dfs(int row) { if (row == N) { ans++; return; } for (int col = 0; col < N; col++) { bool flag = true; for (int i = 0; i < row; i++) { if (board[i][col] || (col - row + i >= 0 && board[i][col - row + i]) || (col + row - i < N && board[i][col + row - i])) { flag = false; break; } } if (flag) { board[row][col] = 1; dfs(row + 1); board[row][col] = 0; } } } int main() { dfs(0); cout << ans << endl; return 0; } ``` 2. 迭代解法 ``` #include <iostream> #include <stack> using namespace std; const int N = 10; int ans = 0; int board[N][N]; struct Node { int row; int col; int state; Node(int i, int j, int s): row(i), col(j), state(s) {} }; void dfs() { stack<Node> s; s.push(Node(0, 0, 0)); while (!s.empty()) { Node node = s.top(); s.pop(); int row = node.row; int col = node.col; int state = node.state; if (row == N) { ans++; continue; } if (state == 0) { // 第一次访问节点 for (int c = 0; c < N; c++) { bool flag = true; for (int i = 0; i < row; i++) { if (board[i][c] || (c - row + i >= 0 && board[i][c - row + i]) || (c + row - i < N && board[i][c + row - i])) { flag = false; break; } } if (flag) { s.push(Node(row, col, 1)); s.push(Node(row + 1, c, 0)); board[row][c] = 1; break; } } } else { // 第二次访问节点 board[row][col] = 0; } } } int main() { dfs(); cout << ans << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值