我通过php解决它,它工作。但我尝试使用方案,我收到“中止!:超出最大递归深度”错误。我使用MIT / GNU Scheme微代码15.3 这是代码。
PHP
dates = Collections.synchronizedMap(dateDao.retrieveDates());
方案
function cc($a,$b)
{
if($b==1){
return $a;
}elseif($b%2!==0){
return $a+cc($a,$b-1);
}else{
return cc(double1($a),halve($b));
}
}
function double1($i)
{
return 2*$i;
}
function halve($i)
{
return $i/2;
}
答案 0 :(得分:1)
您的计划版本并不完全正确。它更像是这个PHP版本:
function cc($a, $b){
if ($b === 1) { return $a; }
call_user_func($b%2!==0,
$a + cc($a, $b-1) );
return else(cc(double1($a), halve($b)) );
}
也许这是一个更好的版本:
(define (cc a b)
(cond ((= b 1) a)
((odd? b) (+ a (cc a (- b 1))))
(else (cc (double a) (halve b)))))
请注意,标识反映了)
从cond
第一行到最后一行的移动。