jeanie 发表于 2006-10-28 01:33

Java 问题

for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
    for(int k=1;k<=4;k++)
      
怎样把上面的三个for换成递归(recursive)形式 ?

谢谢!

greenflute 发表于 2006-10-28 06:29

作业......??

greenflute 发表于 2006-10-28 06:37

仅供参考


public class ForLoopToRecursiveLoop {

        /**
       * @param args
       */
        public static void main(String[] args) {
                forloop();
                System.out.println("-------------------");
                //recursiveloop(1, 1, 1);
                System.out.println("-------------------");
                recursiveloop(1, 1);
        }

        public static void forloop() {
                for (int i = 1; i <= 4; i++)
                        for (int j = 1; j <= 4; j++)
                                for (int k = 1; k <= 4; k++)
                                        System.out.println("" + i + j + k);

        }

        public static void recursiveloop(int i, int j) {
                System.out.println("" + i + j);
                j++;
                if (j <= 4) {
                        recursiveloop(i, j);
                } else {
                        j = 1;
                        i++;
                        if (i <= 4) {
                                recursiveloop(i, j);
                        } else {
                                return;
                        }

                }
        }

}

jeanie 发表于 2006-10-28 09:33

哦,不是作业.


谢谢楼上的!
不过是两重的for循环
其实我想要的是更多层for循环,比如15层,20层,甚至更多;
怎样用递归写? 不能定义15个参数吧?!


还有就是如果只对于简单的三个for循环的时候,
如果限制 i,j,k取值从1...15没有问题,如果大于15他就好象出现溢出了,更何况遇到更多层for循环的时候,
通常这种问题都怎么处理呀?

EX:(求方程的解)

a1﹡x1+a2﹡x2+a3﹡x3+a4﹡x4+a5﹡x5+...... +a18﹡x18=-1
系数 a1, a2, a3….. a18=整数范围=[-99999,+99999]
求x1, x2, x3,……,x18的所有可能取值

[ 本帖最后由 jeanie 于 2006-10-28 12:02 编辑 ]

greenflute 发表于 2006-10-28 11:25


还有就是如果只对于简单的三个for循环的时候,
如果限制 i,j,k取值从1...15没有问题,如果大于15他就好象出现溢出了,更何况遇到更多层for循环的时候,
通常这种问题都怎么处理呀?

由于递归程序每次进入下一次调用都要保存堆栈进行环境切换,很浪费资源,是比较容易出现内存溢出问题的,这也是为什么不推荐使用递归方式设计程序的原因。

greenflute 发表于 2006-10-28 11:27


其实我想要的是更多层for循环,比如15层,20层,甚至更多;
怎样用递归写? 不能定义15个参数吧?!


可以定义二维数组,分别保存变量,变量当前值,变量最大值,当前变量标志等信息。至于是全局方式,还是值参数方式,具体代码应该有相应的区别。

greenflute 发表于 2006-10-28 11:35


求方程的解

a1﹡x1+a2﹡x2+a3﹡x3+a4﹡x4+a5﹡x5+...... +a18﹡x18=-1
系数 a1, a2, a3….. a18=整数范围=[-99999,+99999]
求x1, x2, x3,……,x18的所有可能取值


固然可以采用枚举法,但是最好还是换个算法,否则效率太低。

而且即便是枚举,也不一定非要递归法不可,除非目的就是要做一个递归法和其他算法的比较。

jeanie 发表于 2006-10-28 11:46

我没想到别的方法

你提示偶一下别的方法
,谢谢拉
如果不递归,就是for,那样溢出了

greenflute 发表于 2006-10-28 11:48

一般而言递归溢出的几率更高,看来顺序反了,呵呵

jeanie 发表于 2006-10-28 11:53

原帖由 greenflute 于 2006-10-28 12:27 发表


可以定义二维数组,分别保存变量,变量当前值,变量最大值,当前变量标志等信息。至于是全局方式,还是值参数方式,具体代码应该有相应的区别。

恩,对,这应该不错
页: [1] 2
查看完整版本: Java 问题