循環二重リンクリストに値20を持つすべてのノードを数える次の再帰関数があります。安全性の問題を防ぐため、これを末尾再帰関数に変換する必要があります。同じように私を助けてください。おかげ再帰関数を末尾再帰に変換する
これは、一般的にそう実際にあなたを助けにはなりません末尾再帰フォームにあなたの関数を翻訳し、末尾再帰を認識しないC. Cの実装のように見えますint count(node *start)
{
return count_helper(start, start);
}
int count_helper(node *current, node *start)
{
int c;
c = 0;
if(current == NULL)
return 0;
if((current->roll_no) == 20)
c = 1;
if(current->next == start) return c;
return (c + count_helper(current->next, start));
}
はこの宿題ですか? –
これは宿題でない限り、ここでは再帰の理由はありません。 –
[反復関数から末尾再帰への変換](http://stackoverflow.com/questions/7945313/converting-a-recursive-function-to-tail-recursive)と[反復関数から再帰への変換]( http://stackoverflow.com/questions/7939493/converting-an-iterative-function-to-recursive)。 –