Does tail-recursion use less time and memory than non-tail-recursion? Why my result is opposite?
<?php
function tail_recursion($num, $sum){
if($num == 0){
return $sum;
}
$sum = $sum + $num;
return tail_recursion($num-1, $sum);
}
function non_tail_recursion($num){
if($num == 0){
return 0;
}
return $num + non_tail_recursion($num-1);
}
$tail_start = [
'time' => microtime(1),
'memo' => memory_get_usage(1),
];
echo tail_recursion(456789, 0).PHP_EOL;
$tail_end = [
'time' => microtime(1),
'memo' => memory_get_usage(1),
];
echo 'tail recursion used: '.($tail_end['time'] - $tail_start['time']).' s, '.($tail_end['memo'] - $tail_start['memo']).' memory'.PHP_EOL;
$non_tail_start = [
'time' => microtime(1),
'memo' => memory_get_usage(1),
];
echo non_tail_recursion(456789).PHP_EOL;
$non_tail_end = [
'time' => microtime(1),
'memo' => memory_get_usage(1),
];
echo 'non tail recursion used: '.($non_tail_end['time'] - $non_tail_start['time']).' s, '.($non_tail_end['memo'] - $non_tail_start['memo']).' memory'.PHP_EOL;104328323655
tail recursion used: 0.19636392593384 s, 2097152 memory
104328323655
non tail recursion used: 0.17366099357605 s, 0 memory