Как развернуть эту рекурсивную функцию в цикл?
Я пишу простой трассировщик диффузного пути в 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 не обязательно должен быть в стеке?