簡體   English   中英

如何將此遞歸函數展開為循環?

[英]How to unwrap this recursive function into a loop?

我在DirectCompute中為教育編寫了一個簡單的漫射路徑跟蹤器。 DirectCompute不允許使用遞歸函數,因此我需要弄清楚如何將此遞歸語句轉換為循環:

intersectCode() {

    // ... intersection code 

    if(hit an object)
        return objectHit.diffuse * (intersectCode() + objectHit.emittance);
}

通用偽代碼或C示例將不勝感激

object = initialObject;
objectStack = new ObjectStack();
do {
    objectStack.push(object);
    // get new intersected object as object

} while (object);

result = 0;
while (object = objectStack.pop()) {
    result = object.diffuse * (result + object.emittance);
}

return result;

您可能要調整它,因為所有細節都不知道-例如,也許initObject不必在堆棧中?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM