为什么 --i 和 i-1 在递归中产生不同的输出?

问题描述 投票:0回答:1

我有两种方法,区别是一种是 --i1,另一种是 i-1,但是它们产生不同的输出。

 String s1 = "axbdcg";
        String s2 ="aazzzzzzzzzzzzcbc";
        System.out.println(method(s1,s2,s1.length()-1,s2.length()-1));


 int method(String s1, String s2, int i1, int i2){
    if(s1.length() == 0 || s2.length() == 0) return 0;
    if(i1 < 0|| i2 < 0) return 0;
    if(s1.charAt(i1) ==  s2.charAt(i2)) return 1+  method(s1,s2,--i1,--i2);
int left = method(s1,s2,--i1,i2);

int right =  method(s1,s2,i1,--i2);
         return Math.max(left ,right);
    }

此方法给出 2 作为输出并且

     int method(String s1, String s2, int i1, int i2){
    if(s1.length() == 0 || s2.length() == 0) return 0;
    if(i1 < 0|| i2 < 0) return 0;
    if(s1.charAt(i1) ==  s2.charAt(i2)) return 1+  method(s1,s2,--i1,--i2);
int left = method(s1,s2,i1-1,i2);

int right =  method(s1,s2,i1,--i2);
         return Math.max(left ,right);
    }

给出 3 作为输出。

java recursion dynamic-programming
1个回答
0
投票

foo(--i)
的意思如下:

  1. i
     减少 
    -1
  2. i
  3. 分配新值
  4. 将修改值
    i
    放入方法
    foo()
    P.S.
    i
    已修改

foo(i - 1)
的意思如下:

  1. i
     减少 
    -1
  2. 将修改值
    i
    放入方法
    foo()
    P.S.
    i
    未修改

所以区别在于,当您在第一个片段中调用

method(s1,s2,i1,--i2)
时,
i
正在更改,但在第二个片段中则没有更改。

© www.soinside.com 2019 - 2024. All rights reserved.