任何人都可以告訴我如何使用遞歸編寫乘法函數(在C
)?使用遞歸編碼整數乘法函數(在C中)
回答
將它重複添加到自身N次。也就是說,如果你想用N乘以一個數..
你必須,如果你想很好的幫助是方式更加具體。但這裏有一個在C遞歸函數相乘兩個正整數:
int multiply(int multiplicand, int multiplier)
{
if(multiplier == 0)
{
return 0;
}
return multiply(multiplicand, multiplier - 1) + multiplicand;
}
喬納森·萊弗勒寫道:如果乘數爲負?
確定:
int multiply(int multiplicand, int multiplier)
{
if(multiplier == 0)
{
return 0;
}
if(multiplier < 0)
{
return multiply(multiplicand, multiplier + 1) - multiplicand; //Edit: changed "+ multiplicand" to "- multplicand"
}
return multiply(multiplicand, multiplier - 1) + multiplicand;
}
馬克拜爾斯說:負版本仍然是錯誤的。
抱怨,發牢騷。爲我的記憶力而寫作而無需測試。這個測試了許多整數範圍,負值和正值,奇數和偶數。應該適用於任何整數值。 Merry Wintereenmas。
如果乘數是負數? – 2009-11-22 18:17:29
負面版本仍然是錯誤的。 – 2009-11-22 18:33:07
如果我沒有錯,是這樣的...
int mul(int a, int b)
{
if(b==1)
return a;
else
return a+mul(a,b-1);
}
hm b <= 0 ;-) – 2009-11-23 08:27:19
OK,讓我們的是原來的。 :)
unsigned int mul(unsigned int a, unsigned int b)
{
if (!a || !b) return 0;
if (a == 1) return b;
if (b == 1) return a;
return mul(a-1, b-1)+a+b-1;
}
替代版本:
int mulInner(int a, int b, int c)
{
if (b == 0)
return a*c;
return mulInner(a, b-1, c+1);
}
int mul(int a, int b)
{
return multInner(a, b, 0);
}
嘿,他沒有說不要用operator*
...
額外的信貸:不支持負數! – shoosh 2009-11-22 18:22:49
如果你真的想打動你的同事和你的老師,提交 - 這是遞歸和快速!
int mul(int a, int b)
{
if (a < 0) return -mul(-a,b);
if (b < 0) return -mul(a,-b);
if (b == 0) return 0;
return (mul(a,b>>1)<<1)+(b&1?a:0);
}
添加:作爲一個額外的好處是,這個正確處理二者陽性,陰性和0值。
優秀的答案,先生你可以解釋僞代碼背後的邏輯? – Madhan 2009-11-22 19:09:37
不是。 XD每當我給作業回答時,我要麼用僞代碼給它,給它不完整,要麼給它如此扭曲和「聰明」,以致要求它的人沒有機會解釋它是如何工作的(如果他/她決定把它作爲他/她自己)。 :) – 2009-11-22 19:34:07
嗯...看起來不像我僞造的代碼。這看起來是一個相當正確的答案。弄清楚它是如何工作的,然後解釋給你的老師。 – 2009-11-23 00:04:31
這隻適用於第一個操作數大於零的情況,但至少它很短並且令人困惑。;)
int mul(int a, int b) {
return b + (--a ? mul(a, b) : 0);
}
但是,我不知道該評價順序定義,所以你可能必須移動減量表達外:
int mul(int a, int b) {
a--;
return b + (a ? mul(a, b) : 0);
}
int mul(int a,int b)
{
if(b==1)
return a;
else
return(a+(mul(a,b-1)));
}
50個字符:
m(x,y){return!y?0:rand()%2?m(x,y+1)-x:m(x,y-1)+x;}
我確實希望我可以使用rand()
函數(特別是以這種方式)和一般syn稅收優惠。根據你的系統庫和月亮的相位,要注意的是,遞歸會導致參數值高的段錯誤,比如計算2 × 3
。
- 1. 遞歸階乘函數
- 2. 在C中編寫遞歸函數
- 3. 使用while循環在C中使用遞歸函數的階乘程序c
- 4. C++和遞歸:函數整數到
- 5. 在while循環中使用遞歸函數的階乘程序
- 6. 正整數乘法用C
- 7. 遞歸函數C++
- 8. C++遞歸函數
- 9. 在遞歸函數[C]
- 10. 遞歸在C++函數
- 11. C中的遞歸函數#
- 12. 使用遞歸函數時避免字符串+整數加法
- 13. 遞歸函數中的Pow函數C++
- 14. 使用遞歸函數的C中的指數函數
- 15. 遞歸素數函數C++
- 16. 在Python中編寫遞歸函數
- 17. 在Oracle中編寫遞歸函數SQL
- 18. 使函數遞歸
- 19. XSLT遞歸乘法
- 20. 使用遞歸函數
- 21. 使用遞歸函數itertools
- 22. 使用遞歸函數
- 23. 使用遞歸函數
- 24. 序言:2個數的遞歸乘法
- 25. C++多重遞歸函數
- 26. 大量函數遞歸 - C++
- 27. 無效函數C遞歸
- 28. 一個遞歸函數C++
- 29. C遞歸函數 - GCD
- 30. C蠻力遞歸函數
請提供一些證據證明您至少已經嘗試過這個問題。這不是一個家庭作業網站。我們在這裏幫助,而不是爲你做你的工作。 – 2009-11-22 18:10:21
2009年最不合適使用遞歸的優勝者。 – shoosh 2009-11-22 18:17:16