黯然销魂 发表于 2006-4-14 19:37


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Javascript Edition</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<script language="javascript">
function getAmount(monkeyCount, lastCount) {
      var eachCount;
      var flag;
      if (monkeyCount == 1) {
                eachCount = lastCount;
      } else {
                do {
                        eachCount = getAmount(monkeyCount-1, lastCount)/4;
                        if ((eachCount-Math.floor(eachCount)) != 0) {
                              lastCount++;
                              flag = true;
                        } else {
                              flag = false;
                        }
                } while (flag == true);
      }
      return eachCount*5+1;
}
alert("共有"+getAmount(5, 1)+"只桃子.");
</script>
</body>
</html>

output:
共有3121只桃子.

jayj 发表于 2006-4-14 20:19

THANK Q

黯然销魂 发表于 2006-4-14 22:56

本来还想写JAVA,C++,C#,VBScript版的...才发现啥都没装...

wool王 发表于 2006-4-14 23:07

帮楼上加分了.

gyCai 发表于 2006-4-14 23:57

厉害。光是一个C语言版的就写了我三十分钟......

powerwind 发表于 2006-4-15 00:45

学到也!!!

黯然销魂 发表于 2006-4-15 10:31

其实我的代码是可以优化的.
lastcount这个参数作为一个指针传入的话可以减少递归的次数.
例如,
在递归倒数第2层得到eachcount为a值不能被倒数第一层返回的tempcount整除时,lastcount++, 重新递归, 直到eachcount被上一层返回的tempcount整除,假设已经是lastcount+50的情况了,接着返回到倒数第3层时, 可能会发现, eachcount不能被倒数第2层返回的tempcount整除, 于是lastcount++, 注意到, 这里面lastcount是重新递归的, 其又得进行lastcount到lastcount+50这段递归过程, 而实际上这段在前面已经递归过证实了是不可行的, 所以, lastcount作为指针传入, 递归的临时结果得以保存, 独立于递归函数之外, 我们在前面计算的lastcount的功夫就不会被白费掉.

iptton 发表于 2006-4-15 23:38

学习……学习……

海上飞洪 发表于 2006-4-16 00:32

我今天运行结果竟然只有四只桃子,会不会是溢出了

jackey_sky 发表于 2006-4-19 23:00

天亮了,又要开工了

厉害呀!不错!

[ 本帖最后由 jackey_sky 于 2006-4-19 23:07 编辑 ]
页: 1 [2]
查看完整版本: 帮帮忙!大家帮我看下用什么算法!我想用递归的!但不知道从合做起!!