java - java中递归的替代方法

标签 java recursion

有没有递归的替代方法?我正在处理的类(class)如下 TibrvMsg 这是消息类,其中包含 TirvMsgField 类型的字段 TibrvMsg 还可以包含 TibrvMsg 类型的 TirvMsgField。这意味着消息可以包含消息本身的字段。 我可以使用递归来打印所有字段。但我想修改字段并将其添加到另一个消息中。我想知道是否有递归的替代方法?

import com.tibco.tibrv.*; 

public class ShowMsg { 

static TibrvMsg modMsg =new TibrvMsg(); 
static int id = 0; 
public static void main(String[] args) throws TibrvException{ 

    TibrvMsg msg = getMsg(); 
    TibrvMsg modMsg = getModMsg(msg); 
    //System.out.println(modMsg); 
    for(int i=0;i<modMsg.getNumFields();i++){ 
        TibrvMsgField field = modMsg.getFieldByIndex(i); 
        System.out.println(field.name+"-------"+field.id); 
    } 


} 

public static TibrvMsg getMsg(){ 
    TibrvMsg msg = new TibrvMsg(); 
    try{ 
    TibrvMsg subMsg = new TibrvMsg(); 
    subMsg.add("S1","43333"); 
    subMsg.add("S2","7377773"); 
    subMsg.add("S3","8388883"); 
    //subMsg.add("SUBSUB", subSubMsg); 

    msg.add("Field1", "JJSJJS"); 
    msg.add("Field2", "JDSKJKS"); 
    msg.add("Field3", "9299399"); 
    msg.add("Field4", "HHJJSJJSJ"); 
    msg.add("SUB",subMsg); 
    } 
    catch(TibrvException rv){ 
        System.out.println(rv); 
    } 
    return msg; 
} 



public static TibrvMsg getModMsg(TibrvMsg msg){ 

    try{ 
        int total = msg.getNumFields(); 

        for(int i=0;i<total;i++){ 
        TibrvMsgField field = msg.getFieldByIndex(i); 
        if(field.type==TibrvMsg.MSG){ 
             getModMsg((TibrvMsg)field.data); 
        } 
        else{ 

            field.id = id++; 
            msg.updateField(field); 

        } 

    } 
    } 
    catch(TibrvException rv){ 
    System.out.println(rv);  
    } 

    return msg; 

} 

} getMsg() 方法返回示例消息。在 getModMsg() 中,我使用递归并且它有效,这意味着我能够打印每个字段和子字段。现在在这个方法中,我想修改字段属性并更新消息。Means 方法应该返回修改后的消息。因此我使用:

字段.id = id++; msg.updateField(字段); 这不起作用。我现在想要的是使用上述函数创建修改后的消息。

最佳答案

有直接递归和间接递归,其中方法调用自身,而间接递归则方法调用另一个方法,而该方法会调用原始方法。实际上并没有任何“递归的替代方法”,因为递归只是一个概念。

关于java - java中递归的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993584/

相关文章:

c# - 重复调用函数,直到收到所需的输出

F# 将 sprintf 应用于字符串列表

java - 使用 Java 根据文本文件中的 key 验证/检查文件校验和

java - jsp中的jfreechart

Java线程,在主代码中访问对象

java - JavaBeans 对 OCA 方法命名约定的误解

javascript - 如何 promise 这个递归函数

c++ - 元整数平方根中的无限递归

java - 通过递归向 ArrayList 添加值是否会删除每个添加的新值的列表?

java - 为什么 for 循环索引不能正常工作?