首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Php递归函数无限循环错误

Php递归函数无限循环错误
EN

Stack Overflow用户
提问于 2018-08-19 20:55:21
回答 1查看 137关注 0票数 0

我有一个php递归函数来计算最近的销售价格。但我不知道为什么它运行无限的时间和抛出错误的最大执行。

它的样子如下:

代码语言:javascript
复制
 function getamazonsaleper($portal)
      {
          $cp = floatval($this->input->post('cp')); //user provided inputs
          $sp = floatval($this->input->post('sp')); //user provided input
          $gst = floatval($this->input->post('gst')); //user provided input
          $rfsp = floatval($this->input->post('rfsp')); //user provided input
          $mcp = (int)($this->input->post('mcp')); //user provided input
          $weight = floatval($this->input->post('weight')); //user provided input

          $output = $this->getsalepercent($cp,$sp,$gst,$rfsp,$mcp,$weight,$portal); 
          return $output;




      }
      function getsalepercent($cp,$sp,$gst,$rfsp,$mcp,$weight,$portal) //recursive funtion
      {

          $spcost = ((($sp/100)*$cp));
          $gstamount= (($spcost/(100+$gst))*$gst);
          $rfspamount= ($spcost*($rfsp/100));
          $mcpamount= ($cp*($mcp/100));

          $fixedfee=$this->getfixedfee($portal,$spcost);
          $weightfee=$this->getweightprice($portal,$weight);
          $totalcost=$fixedfee+$weightfee+$rfspamount;
          $gstinput=($totalcost*(18/100));
          $remittances = $spcost-$totalcost-$gstinput;
          $actualprofit= $remittances-$cp-$gstamount+$gstinput;
          $actualprofitpercent = ($actualprofit/$cp)*100;

          if( $actualprofitpercent >= $mcp)
          {
              return $sp;

          }elseif($actualprofitpercent < $mcp)
          {
              $newsp = (int)($sp+10) ;
              $this->getsalepercent($cp,$newsp,$gst,$rfsp,$mcp,$weight,$portal);

          }

      }

谁能告诉我如何解决这个问题?提前谢谢。

编辑:

参数

代码语言:javascript
复制
$cp=100;
$sp=200;
$mcp=20;
$weight=0.5;
$gst=28;
$rfsp=6.5;
EN

回答 1

Stack Overflow用户

发布于 2018-08-20 00:55:05

首先是几个附注:

  • 你使用$gstinput的方式它会在你计算$actualprofit时自动抵消(它是$remittances中添加到+$gstinput).
  • $mcpamount中的-$gstinput,在代码中似乎完全没有用到……我曾一度认为您可能在进行比较时简单地混淆了变量,但当然对于$cp = 100这没有什么区别。

尽管如此,当我使用您给出的$sp = 200 (递增10)的示例值进行了一些计算时,我得到了:

$actualprofit的值,当$cp =100时,它也是$actualprofitpercent的值...

对于$sp = 200:

43.25 - $fixedfee - $weightfee

对于$sp = 210:

50.4125 - $fixedfee - $weightfee

对于$sp = 220:

57.575 - $fixedfee - $weightfee

因此,对于每次$sp = $sp + 10递归,$actualprofitpercent的值(不考虑$fixedfee和$weightfee)似乎增长了7.1625。

$weightfee的值应该保持不变,但$fixedfee的值取决于$sp的值……会不会在每次递归时,getfixedfee()返回一个比7.1625更快的值?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51917872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档