在递归函数中使用Java递减运算符

时间:2015-05-09 03:32:26

标签: java function recursion variable-assignment

这是一个递归函数 -

private void printVar01(int t){
    if(t != 0){
        logp.info("o: "+t);
        printVar01(t-1);
    }
}

相同的功能,略有修改 -

private void printVar02(int t){
    if(t != 0){
        logp.info("o: "+t);
        printVar02(t--);
    }
}

如果我传入一个像4这样的整数值,printVar01按预期工作,其中t在连续的recrsive调用中递减为0,最终导致程序退出。

使用printVar02,t保持在值4.

为什么呢?我假设这与变量赋值和/或值如何传递给函数有关。

3 个答案:

答案 0 :(得分:3)

CREATE OR REPLACE PROCEDURE PRINT_ALL_CUSTOMERS AS T_CUST_LASTNAME CUSTOMERS.LASTNAME%TYPE; T_CUST_FIRSTNAME CUSTOMERS.FIRSTNAME%TYPE; T_ORD_ORDERDATE ORDERS.ORDERDATE%TYPE; T_ORD_SHIPDATE ORDERS.SHIPDATE%TYPE; T_TOT_CUST INTEGER:=0; CURSOR CUST_CURSOR IS SELECT LASTNAME, FIRSTNAME FROM CUSTOMERS; BEGIN OPEN CUST_CURSOR; LOOP FETCH CUST_CURSOR INTO T_CUST_LASTNAME, T_CUST_FIRSTNAME; EXIT WHEN CUST_CURSOR%NOTFOUND; DBMS_OUTPUT.PUT_LINE('NAME: ' || T_CUST_LASTNAME || ', ' || T_CUST_FIRSTNAME); T_TOT_CUST := T_TOT_CUST + 1; END LOOP; CLOSE CUST_CURSOR; DBMS.OUTPUT.PRINT_LINE(''); DBMS.OUTPUT.PRINT_LINE('NUMBER OF CUSTOMERS: ' || T_TOT_CUST); END; / BEGIN PRINT_ALL_CUSTOMERS; END; t-1的情况下不会更改t

  • t--为您提供新值,而不会影响t-1
  • 的实际值
  • t为您提供t--而不是降低t的价值

我认为t应该可以正常工作,并且printVar02值保持不变。

DoubleMa

的评论
  

实际01将工作不02,在01 t正在改变,但在02   函数在改变T的值之前调用自己,他只是   需要使用--t;

我也肯定怀疑递归电话。

如果您的意思是printVar01 = printVar = printVar01

如果您递归调用printVar02而不是printVar将会起作为递归调用将使其正常工作,而t-1每次都会传递相同的值t--&# 39; sa postdecrement使用predecrement 4代替。

答案 1 :(得分:2)

只需使用--t而不是t -

private static void printVar02(int t){
if(t != 0){
    logp.info("o: "+t);
    printVar02(--t);
}

答案 2 :(得分:2)

在执行语句printVar(t--)之后,递减递减值减1。因此,每次将4传递给函数。
使用时应使用--t代替先执行递减。