[英]Recursive method - Java
附加信息:
芯片不支持乘法,僅支持加法。 我應該通過創建一個遞歸方法mult()來解決此問題,該方法通過將x加到自身y次來執行x和y的乘法。 它的參數是x和y,其返回值是x和y的乘積。 然后,我應該編寫方法和main()來調用它。
這是純粹的邏輯思維,但是每次嘗試思考該怎么做時我都會迷路。
我被數學困住了。.我擁有的東西不起作用,我知道數學是錯誤的,但是我對此並不擅長:
public static void mult(int x, int y) {
x = 0;
y = 0;
if (y > 0) {
for (int i = 0; i < y; i++) {
x = x * (x * y);
return mult(x, y);
}
}
}
當我聽到“遞歸”時,我希望看到兩件事:
那你呢 在編寫代碼之前,先用文字寫下來。
一種可能性是使用累加器,該累加器將存儲乘法的當前值。 我用???替換缺少的語句 :
public static void main(String []args){
System.out.println(mult(2,5));
}
public static int mult(int x, int y) {
if(???) return ???;
else return multAcc(???,???,???);
}
private static int multAcc(int x, int y, int acc){
if(???) return ???;
else return multAcc(???, ???, ???);
}
...通過將x加到自身y次。
您實際上可以做到這一點,而不是相乘。 哦,也許如果您沒有同時將x和y都設置為零,那么您將需要添加一些;-)
最后一件事:如果您需要遞歸解決方案,則不需要for循環。
您需要記住的是,乘法是重復的加法( 假設兩個操作數均>= 0
),因此我們有:
y
為零時 y
不為零,則將x
再加一次,並從y
減去1
請注意,只要y
為正,它最終將具有零值。 因此,基本上我們一直將x
總數相加y
次; 這就是我的意思:
public static int mult(int x, int y) {
if (y == 0)
return 0;
return x + mult(x, y-1);
}
相同的代碼也可以尾部遞歸的方式編寫-意思是:遞歸調用返回后無事可做,這對於某些支持所謂尾部調用優化的語言很重要:
public static int mult(int x, int y, int accumulator) {
if (y == 0)
return accumulator;
return mult(x, y-1, x + accumulator);
}
上面將被調用如下,注意最后一個參數總是初始化為零:
mult(10, 5, 0)
=> 50
Java在設計上沒有TCO,因此對線性(而非樹狀)進程使用遞歸是一個非常糟糕的主意。 特別是對於此類任務,這很可能會成為您程序中的瓶頸。 使用循環代替。
哦,還是必須遞歸嗎? 看起來像是一項家庭作業。 那你自己做。
public static int mult(int x, int y) {
if (y == 0) {
return 0;
}
if (y > 0) {
return x + mult(x, y - 1);
} else {
return -x + mult(x, y + 1);
}
}
這是解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.