黑马程序员技术交流社区

标题: Java允许两个函数互相调用对方吗? [打印本页]

作者: swon13    时间: 2014-10-24 14:53
标题: Java允许两个函数互相调用对方吗?
例如,有函数A(), B()
在A()中调用了B(), B()中又调用了A()。
这种调用会陷入无限循环,但在语法上可以通过吗?
作者: 杨佳名    时间: 2014-10-24 15:22
Demo一下呗
作者: zd12345    时间: 2014-10-24 15:25
应该可以的

作者: qq8921310    时间: 2014-10-24 15:38
应该是不可以。
作者: 践行渐远    时间: 2014-10-24 17:29
相互调用是可以的,只是运行起来会让堆内存溢出
作者: 付江涛    时间: 2014-10-24 17:30
这完全可以自己试一下
作者: 迷茫小王    时间: 2014-10-24 17:32
相互调用应该是可以的,但是两个函数相互调用之后他俩玩起来了,内存受不鸟了...
作者: shuken1990    时间: 2014-10-24 17:44
语法上可以通过
作者: 面具猴    时间: 2014-10-24 18:10
可以的,的确会形成死循环,但是递归算法就是用的这个方式,只要控制好条件就好了。
比如可以在给函数传递一个参数,用来确定递归的层次,每进入一层递归就减去一,当传入参数为0时return。
作者: 千里马    时间: 2014-10-24 22:59
这个是可以实现的,你可以试试两个函数中互相调用各自的循环部分,这样就可以实现死循环!
作者: 康师傅-蛋黄派    时间: 2014-10-24 23:01
可以的,控制好,别整成死循环就行
作者: 田峻菘    时间: 2014-10-24 23:13
可以的。
作者: noiary    时间: 2014-10-24 23:13
  1. /*
  2. 测试两个函数互相调用是否可行
  3. */

  4. public class Demo {

  5.         public static void main(String[] args) {
  6.                 method_1();
  7.         }
  8.        
  9.         public static void method_1() {
  10.                 System.out.println("method_1");
  11.                 method_2();
  12.         }
  13.        
  14.         public static void method_2() {
  15.                 System.out.println("method_2");
  16.                 method_1();
  17.         }
  18.        
  19. }
复制代码


打印结果开始时是死循环,跑一会就会出现:

  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)
  at Demo.method_2(Demo.java:18)
  at Demo.method_1(Demo.java:13)

作者: renchiyao    时间: 2014-10-24 23:24
理论上是行得通,但感觉这种情况,没有多大实际操作价值吧?
作者: 郑飞    时间: 2014-10-25 00:26
可以的 我矩阵打印连续数字就是这么搞得
作者: 王世虎    时间: 2014-10-25 09:48
嗯,这个问题问的好,学习了
作者: 齐宁宁    时间: 2014-10-25 09:56
可以,但要加上条件限制。比如在A中加上条件,并且调用B。在B中判断条件,满足则进行某项操作,不满足则调用A。可用函数的相互调用实现另类的循环
作者: 韶山    时间: 2014-10-26 08:30
可以,但是会卡死的
作者: 菜鸟一号    时间: 2014-10-26 09:01
这个是可以的,你等着死循环就是了,最好加些结束的条件啦
作者: zhangyangLengen    时间: 2014-10-26 09:33
可以的,编译时没有问题,但是运行时死循环
作者: lyhwd2    时间: 2014-10-26 13:36
可以的 . 类似死递归吧 . 最终肯定会报错
作者: 皮三藏    时间: 2014-10-26 14:00
可以通过编译器检查
作者: EDDY_Liang    时间: 2014-10-26 14:15
可以,不过要在一个方法里设置停止的语句,不然就是内存溢出了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2