int prod(int a, int b) {
if (a == 0 || b == 0) {
return 0;
}
else {
return a prod(a, b - 1)。
}
}
它看起來很簡單,但我不明白為什么它能作業?如果它最終回傳0,它是如何回傳正確的產品的呢?如果有人能指導我完成這個程序,我將非常感激,謝謝。
uj5u.com熱心網友回復:
大多數人都不喜歡它,但我試著向你解釋一下。
所以讓我們寫一些亂數,例如a=3 b=4,以表示不同。
所以程式不知道真實的3 prod(3,4)是怎樣的,只是簡單的 他要做什么呢?他要呼叫下一個函式,比如3 prod(3,3) //因為你遞減了1;而且程式也不知道它到底是怎么回事,會一直呼叫自己,直到3達到0,并將0回傳給下一個函式。
我將向你展示它現在的樣子
我將向你展示現在的情況
3 (3,4) //它檢查b或a ==0
3 (3,3) //它檢查是否b或a==0。
3 (3,2)//它檢查是否b或a==0。
3 (3,2)//它檢查是否b或a ==0。
3 (3,1)//它檢查是否b或a ==0。
3 (3,0) //它檢查是否b或a==0。
和最后一個雅a==0。
所以條件是正確的,所以
它回傳3給呼叫它的函式,在這種情況下回傳prod 3 (3,1)
呼叫了 return prod 3 (3,0)
所以它將從prod 3 (3,0)到3 (3,1),它將回傳什么值?
當然是0
所以它將一直回傳
。
3 prod(3, 1) ==0 //0已被回傳,程式知道此值。
3 prod(3, 2) == 3 3)
3 prod(3, 3) ==3 63 prod(3, 4] ==3 9
所以最后你有12。
uj5u.com熱心網友回復:
那么這個函式服從一個簡單的數學規則,即: a*b = a a*(b-1) and a*(b-1) = a a*(b-2) and etc. 因此,該函式通過將a*b分解為a*(b-1)來完成一個乘積,直到它達到0的值時停止。
uj5u.com熱心網友回復:
如果b是0,它回傳0(因為如果你用0乘以什么,你會得到0)。
如果b是正數,則回傳a prod(a,b-1);是的,最里面的呼叫prod(a,0)將回傳0,呼叫它的prod(a,1)將回傳a,以此類推,直到原始prod(a,b)將回傳a a ... a=a*b
注意,只有當b不是負數時,它才起作用。另外,如果a==0的檢查也是不相關的。(如果a==0,代碼會更快一些,但在這段代碼中,性能并不重要)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/319337.html
標籤:
上一篇:列印結構中的所有節點
