这是一个递归函数 -
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.
为什么呢?我假设这与变量赋值和/或值如何传递给函数有关。
答案 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
值保持不变。
实际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代替先执行递减。