在這裏我正在處理以下問題,我們給出n種類型的硬幣面值v(1) > v(2) > ... > v(n) (all integers)
下面的代碼試圖找到最小數量的硬幣需要做一個總和-C。這裏的C是100(見主函數)。當我運行代碼時,錯誤 - 「java.lang.StackOverflowError」出現。請幫忙。Stackoverflow錯誤計算硬幣的最小數量作出的總和S
import java.util.ArrayList;
public class Problem2 {
public static int count=4;
public static int []v={25,10,5,1}; //Array storing denominations
private static int findminimum(ArrayList<Integer> v2) {
int count=v2.get(0);
for(int i=0;i<v2.size();i++)
{
if(count>v2.get(i))
{
count=v2.get(i);
}
}
return count;
}
public static int countmincoins(int n)
{
int t;
if(n<0)
{
t=Integer.MAX_VALUE-100 ;
}
if(n==0)
{
t= 0;
}
else
{
ArrayList<Integer> a=new ArrayList<Integer>();
for(int i=0;i<v.length;i++)
{
int temp=0;
temp=countmincoins(n-v[i])+1; //Stackoverflow error
a.add(temp);
}
t=findminimum(a);
}
return t;
}
public static void main(String args[])
{
System.out.println(countmincoins(100));
}
}
你的第二個'if'應該是'else if'。 – dlev
問題是代碼沒有終止。請幫助爲什麼不被終止 – Akshit
@Ashshit是否需要使用遞歸?循環會更容易。 –