有没有递归的替代方法?我正在处理的类(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/