lzzzing学习笔记

正在学的和想要学的

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  45 随笔 :: 7 文章 :: 18 评论 :: 0 Trackbacks
 

今天在玩Hashell的时候,学到列表的内涵,计算a,b100以内所有的勾股数,发现速度很慢,1分多才能算完所有的数,于是想到是不是算法本身的问题,这个问题本身决定它无法快速的运算,PHP试了一个,写出如下代码:

 1<?php
 2
 3for (;$a<100;$a++)
 4
 5{
 6
 7     for($b=$a;$b<100;$b++)
 8
 9     {
10
11             $c=sqrt(pow($a,2)+pow($b,2));
12
13            if($c==(int)$cecho "$a $b $c<br/>";
14
15            
16
17     }
18
19}
20
21echo "end";
22
23?>
24
25

PHP只用了不到一秒的时间就搞定了问题.才发现Haskell效率实在太低.但我看了一下PHP运行结果,发现了有趣的结果,如下:

0
1 1
2 2

(此段为 a a 形式数,直到99 99)

99 99
3 4 5

(此段为正确结果,不列出)
80 84 116
end

开头的0,1 1,2 2……是怎么回事?

回到代码,看一下第一个循环:

for (;$a<100;$a++)

发现此处少写

$a=1

改完后正常(此代码初有变量声明,后删之,忘记加上,才出现些错误)

回头想一下出现原因.变量$a没有初始化,那么$b是什么?因为PHP的动态内存管理机制,

$b=$a

时只是传递了$a的引用,并没有分配新的内存单元,那么是与$a完全相同的类型,也为NULL.

 

$c=sqrt(pow($a,2)+pow($b,2));

 

此名传递参数类型错误,PHP没有给出任何错误提示,执行结果是$c0.

下一步,$b++,$b初值为NULL,自增后为1,把它当做0处理了.
posted on 2008-04-07 12:35 lzzzing 阅读(98) 评论(0)  编辑 收藏 引用 所属分类: PHP


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
 
相关链接: