Как развернуть эту рекурсивную функцию в цикл?

Я пишу простой трассировщик диффузного пути в DirectCompute для образования. DirectCompute не допускает рекурсивные функции, поэтому мне нужно выяснить, как превратить этот рекурсивный оператор в цикл:

intersectCode() {

    // ... intersection code 

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

Общий псевдокод или пример C был бы очень признателен

1 ответ

Решение
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 не обязательно должен быть в стеке?

Другие вопросы по тегам