<?php
  function jc($i){
      if($i>1){
          $s=$i*jc($i-1);
      }
      else{
          $s=$i;
      }
      return $s;
  }
  echo jc(5);
?>请详细说明递归的过程,谢谢。

解决方案 »

  1.   

    jc(5)=5*jc(4);jc(4)=4*jc(3)....jc(1)=1;
    所以jc(5)=5*4*3*2*1
      

  2.   

    递归相当于栈的原理。开始进栈第一次调用函数:$i=5, $i>1成立,故$s=5*jc(4);而jc(4)又要调用函数jc();第二次调用函数:$i=4, $i>1成立,故$s=4*jc(3),返回值为$S,即jc(4)=4*jc(3).而jc(3)又要调用函数jc();第三次调用函数:$i=3, $i>1成立,故$s=3*jc(2),返回值为$S,即jc(3)=3*jc(2).而jc(2)又要调用函数jc();第四次调用函数:$i=2, $i>1成立,故$s=2*jc(1),返回值为$S,即jc(2)=2*jc(1).而jc(1)又要调用函数jc();第五次调用函数:$i=1, $i>1不成立,执行else里面的内容,故$s=1;此时函数返回值为1,即jc(1)=1;
    最后出栈。计算结果即为:jc(5)=5*4*3*2*1;
      

  3.   

    递归相当于栈的原理。开始进栈第一次调用函数:$i=5, $i>1成立,故$s=5*jc(4),返回值为$S,即jc(5)=5*jc(4);而jc(4)又要调用函数jc();第二次调用函数:$i=4, $i>1成立,故$s=4*jc(3),返回值为$S,即jc(4)=4*jc(3).而jc(3)又要调用函数jc();第三次调用函数:$i=3, $i>1成立,故$s=3*jc(2),返回值为$S,即jc(3)=3*jc(2).而jc(2)又要调用函数jc();第四次调用函数:$i=2, $i>1成立,故$s=2*jc(1),返回值为$S,即jc(2)=2*jc(1).而jc(1)又要调用函数jc();第五次调用函数:$i=1, $i>1不成立,执行else里面的内容,故$s=1;此时函数返回值为1,即jc(1)=1;
    最后出栈。计算结果即为:jc(5)=5*4*3*2*1;