cdex

JAVA算法之递归

蹲街弑〆低调 提交于 2021-01-06 04:53:31
Ⅰ、三角数字   首先我们来看一组数字:1,3,6,10,15,21.....,在这个数列中第n项是由n-1项加n得到的,这个序列中的数字称为三角数字因为他们可以形象化地表示成一个三角形排列。如下图 通过上面的图首先我们就可以想到使用循环来查找第n项的数值,下面代码就是从高度为n的列加到高度为1的列 int triangle( int n){ int total = 0 ; while (n>0 ){ total = total + n; -- n; } return total; } 上面方法循环了n次,第一次加n,第二次加n-1,一直加到1从而可以算出第n项的值。 使用递归的思想查找第n项的值,此时我们将三角数字看做是第一列和剩余所有列的和,如下图所示,可以写出triangle()方法 int triangle( int n){ // 1. return (n + sumAllColums(n-1)) // 这里我们可以发现sumAllColums方法做的事情和triangle做的事情一模一样 return (n + triangle(n-1)) // 这里我们可以将上面步骤换为此步骤,从而得到求三角数字的递归算法 }   此时上面的递归代码是不会终止的,所以我们的每一个递归代码要有一个我们称之为基值(base case)以防止无限递归导致程序崩溃