作爲學習遞歸的練習,我試圖通過輸入兩個整數(包括正值,負值和零值)顯式重新創建加法運算符。然而,這個問題是我對自己設定了一些嚴格的限制。使用約束在Java中顯式創建加法運算符。不可解?
約束
使用遞歸和條件
不能使用迭代(例:for
,while
等)
不能使用隱迭代(例:++
,--
)
不能用一個數學運算符(例如:+
,-
,/
等)
不能使用簡寫的任務(例如:+=
,-=
,/=
等)
代碼
這裏是我的代碼:
/**
* Create explicit addition with given constraints.
*
* @author CodingBash
*
*/
public class Addition {
/**
* Function call
*
* @param args
*/
public static void main(String[] args) {
int firstNumber = 3;
int secondNumber = 6;
// firstNumber + secondNumber
int result = add(firstNumber, secondNumber);
System.out.println(result);
}
/**
* Function recursively takes a number from 'giver' one at a time and
* "gives"/"adds" it to 'receiver'. Once nothing more to "give" ('giver'
* ==0), then return the number that received the values, 'receiver'.
*
* @param receiver
* - parameter that accumulates (++ each layer)
* @param giver
* - parameter that dissipates (-- each layer)
* @return
*/
public static int add(int receiver, int giver) {
if (giver != 0) {
return add(directionalIncrement(receiver, giver),
directionalIncrement(giver, -giver));
} else {
return receiver;
}
}
/**
* Increments (or decrements) the 'number' based on the sign of the
* 'direction'
*
* @param number
* - base number that is incremented or decremented
* @param direction
* - number that determines if base number increments or
* decrements. If positive, increment. If negative, decrement.
* @return
*/
public static int directionalIncrement(int number, int direction) {
int incrementalValue = (direction > 0) ? 1 : -1;
return add(number, incrementalValue); // StackOverflowError
}
}
的代碼產生在return add(number, incrementalValue);
一個StackOverflowError
。儘管如果將語句替換爲return number + incrementalValue
,代碼的運行與整型輸入的任何變化完全相同。但是,這種變化偏離了約束條件。
這個任務的某些約束是不可解的嗎?如果是這樣,請解釋如何。如果沒有,請在給定約束內提供一個解決方案,最好與我的實施相似。
您認爲您的加入作品如何? –