這應該不難。
讓我們先迭代這樣做來理解這應該如何工作。
public static int rangeProduct(int valueOne, int valueTwo)
{
int prod = 1;
for(int i = valueOne; i <= valueTwo; i++) {
prod *= i;
}
return prod;
}
所以做這個遞歸將只是簡單:使用遞歸
public static int rangeProduct(int valueOne, int valueTwo)
{
if (valueOne ==0 || valueTwo == 0) return 0;
//Range check
if (valueOne > valueTwo) return rangeProduct(valueTwo, valueOne);
if (valueOne < 0 && valueTwo > 0) return 0; //Because 0 is always in this range
if (valueOne == valueTwo) return valueTwo;
return valueTwo*rangeProd(valueOne, valueTwo-1);
}
邏輯:假設你有一個範圍(3,5),則:
(3,5- )= - 5 *(3,4)= 5 * 4 *(3,3)= 5 * 4 * 3 = 60
(-3,-1)= -1 *( - 3,-2)= -1 * -2 *( - 3,-3)= -6
(-3,5)= 0(因爲該範圍包括0)
(5,3)與(3,5)相同,所以這也可以返回60。
(3,3) - >現在如果兩個no都一樣,答案基本上是3.
希望這有助於!
編寫一個正常的遞歸階乘函數,返回fact(valueTwo)/ fact(valueOne-1)。 – azurefrog
@azurefrog - 這似乎是很多額外的工作來計算rangeProduct(1000006,1000007)。 :) –
@AndyThomas我是一個數學專業,所以我自然用以前解決的問題來解釋我的所有答案...... ;-) – azurefrog