编程之递归思想理解记录

来源:互联网 发布:门淘宝网 编辑:程序博客网 时间:2024/05/22 13:53

在一个程序里解决递归部分问题需要考虑两个问题,其他需要执行的程序暂时不考虑:

  1. 递归执行的的终止条件,如Fibonacci数列的终止条件为m<=2,return 1;阶乘的终止条件为 n==1, ruturn 1;
  2. 递归执行的公式,如Fibonacci数列公式为 f(n) = f(n-1)+f(n-2);阶乘的递归公式为f(n) = n*f(n-1);

在理解递归问题时,可将其分为拆解过程返值过程,拆解过程是按照问题解决的递归方式来进行拆解,返值过程是当达到了执行的终止条件时,由里到外,由下到上的返回值的过程。
按照以上思路来分析SONY公司2007年的面试题:把一个数组里的数组的数 组合全部列出,如{1,2},列出12,21.这里的组合应该是排序,过程如图所示。
      
拆解过程:如欲求{1,2,3}的排列数,就需求1,{2,3},3,{1,2},2,{1,3}的排列数,同理求{2,3},就需求2,{3}和3,{2}的排列数,求{2},就需要2{}的排列数,{}已无元素,条件终止
返值过程:当终止条件,也即是数组已经为空时,不在继续递归,在终止条件内返回值;

0 0