Во-первых, обратите внимание, что вы не можете сделать это для любой рекурсивной функции.
Рассмотрим следующий код:
int SumNum(int nMax)
{
if (0 == nMax)
return 0;
else
return nMax + SumNum(nMax-1);
}
Фактическое значение рассчитывается при возврате.
Однако вы можете переписать код следующим образом:
int SumNum(int nMax, int nSum)
{
if (0 == nMax)
return nSum;
else
return SumNum(nMax-1, nSum+nMax);
}
Теперь вы можете сделать следующий трюк:
int SumNum(int nMax, int nSum)
{
if (0 == nMax)
throw nSum;
else
return SumNum(nMax-1, nSum+nMax);
}
f()
{
int nSum;
try
{
SumNum(100, 0);
}
catch (int _nSum)
{
nSum= _nSum;
}
}