递归程序设计的简单理解

递归算法:在函数或子过程的内部,直接或者间接地调用自己的算法。
  1. 初始化算法。递归程序通常需要一个开始时使用的种子值(seed value)。要完成此任务,可以向函数传递参数,或者提供一个入口函数, 这个函数是非递归的,但可以为递归计算设置种子值。(求解关系表达式)
  2. 检查要处理的当前值是否已经与基线条件相匹配。如果匹配,则进行处理并返回值。(结束递归的条件)
  3. 使用更小的或更简单的子问题(或多个子问题)来重新定义答案。
  4. 对子问题运行算法。
  5. 将结果合并入答案的表达式。
  6. 返回结果。

自己写的几个递归的小实例,练习一下(php)

最经典的兔子问题: 斐波纳契数列
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
关系式为 a(n) = a(n-1)+a(n-2)
递归法求解为

function tuzi($n){
   
if($n<=1){
         
return 1;
   }
   
return (tuzi($n-1)+tuzi($n-2));
}


求整数的和 (1~100)

function add_num($n){
        
if($n<=0){
                
return 0;
        }
        
return $n + add_num($n-1);

}


 求数组中最大值问题(这个跟循环求解基本一样)

function array_max($arr,$n,$max){
                
if($n<=0){
                        
return $max;
                }
                
if($arr[$n]>$max){
                        
$max = $arr[$n];
                }
                
return array_max($arr,$n-1,$max);
}


 

 

posted @ 2010-10-20 00:10  般若随风  阅读(312)  评论(0编辑  收藏  举报