# how to make a function recursive

#### Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

•  Subject
• Author
• Posted on
I have this circle of chairs from 1-100.  I want to subtract every
other chair starting from chair 1 recursively until I find the last
remaining chair.
I could do it in passes with the function below by returning \$out.

I thought I could make the function recursive by adding the return
(count(\$arr[\$key])==1?\$out: count_chairs(\$arr)) instead of \$out but I
don't know how to pass the first array in and then pass in the
difference of the \$out and the new array on each pass?

Thanks,
?php

function count_chairs(\$arr)
{
// how many elements in array
\$i = count(\$arr);

// Creat an index to positions 0, 2, 4, ... \$i
\$index = range(1, \$i, 2);

// Return the data at positions 0, 1, 2, ...
\$out = array();
foreach(\$index as \$key)
{
\$out[] = \$arr[\$key];
}

return \$out;
}

//fill array
\$arychairs= range(1,100);

\$filtered = count_chairs(\$arychairs);

echo "<pre>";
print_r(\$filtered);
echo "</pre>";

?>
-------------------------------------------------
The remaining chairs from the first pass is all the even chairs.
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
[5] => 12
[6] => 14
[7] => 16
[8] => 18
[9] => 20
[10] => 22
[11] => 24
[12] => 26
[13] => 28
[14] => 30
[15] => 32
[16] => 34
[17] => 36
[18] => 38
[19] => 40
[20] => 42
[21] => 44
[22] => 46
[23] => 48
[24] => 50
[25] => 52
[26] => 54
[27] => 56
[28] => 58
[29] => 60
[30] => 62
[31] => 64
[32] => 66
[33] => 68
[34] => 70
[35] => 72
[36] => 74
[37] => 76
[38] => 78
[39] => 80
[40] => 82
[41] => 84
[42] => 86
[43] => 88
[44] => 90
[45] => 92
[46] => 94
[47] => 96
[48] => 98
[49] => 100
)

## Re: how to make a function recursive

On Wed, 27 Jul 2011 10:58:55 -0700, jr wrote:

The following will, I think, do what you want. As an exercise in learning
php, I leave it to you to work out how it does it. Sorry if these seems
rather abrupt of me, but your question sounds like a tutorial or homework
of some sort, so I'm not prepared to provide both an explanation and
working code.

<?php
function t(\$a)
{
\$c = 0;
foreach (\$a as \$i=>\$d) if (\$d>0) \$c++;
return \$c;
}
function r(\$a,\$i=0)
{
if (t(\$a)==1) return \$a;
do
{
\$i+=1;
if (\$i==count(\$a)) \$i=0;
}
while ((\$a[\$i])<0);
\$a[\$i]=-1;
do
{
\$i+=1;
if (\$i==count(\$a)) \$i=0;
}
while ((\$a[\$i])<0);
return r(\$a,\$i);
}
\$a = array();
for (\$i=0;\$i<100;\$i++) \$a[]=1;
\$a = r(\$a);
foreach (\$a as \$i=>\$d) if (\$d>0) echo " ";
echo "\n";
?>

Rgds

Denis McMahon

## Re: how to make a function recursive

On Wed, 27 Jul 2011 10:58:55 -0700, jr wrote:

The following will, I think, do what you want. As an exercise in learning
php, I leave it to you to work out how it does it. Sorry if these seems
rather abrupt of me, but your question sounds like a tutorial or homework
of some sort, so I'm not prepared to provide both an explanation and
working code.

<?php
function t(\$a)
{
\$c = 0;
foreach (\$a as \$i=>\$d) if (\$d>0) \$c++;
return \$c;
}
function r(\$a,\$i=0)
{
if (t(\$a)==1) return \$a;
do
{
\$i+=1;
if (\$i==count(\$a)) \$i=0;
}
while ((\$a[\$i])<0);
\$a[\$i]=-1;
do
{
\$i+=1;
if (\$i==count(\$a)) \$i=0;
}
while ((\$a[\$i])<0);
return r(\$a,\$i);
}
\$a = array();
for (\$i=0;\$i<100;\$i++) \$a[]=1;
\$a = r(\$a);
foreach (\$a as \$i=>\$d) if (\$d>0) echo " ";
echo "\n";
?>

Rgds

Denis McMahon