数据结构递归

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/undiif123/article/details/88086318

什么是递归?
递归是一种应用非常广泛的算法,因为它可以通过同一种算法不断低简单重复,这样可以把一个复杂的问题分解成很多层简单的问题。
递归实现原理?
递归的本质有三条:其一是自顶而下,其二是自己不断重复,其三是循环中的结束条件。

递归例子:
假如这里有 n 个台阶,每次你可以跨 1 个台阶或者2个台阶,请问走这n个台阶有多少种走法?如果有7个台阶,你可以2,2,2,1这样子上去,也可以1,2,1,1,2这样子上去,总之走法有很多,那如何用编程求得总共有多少种走法呢?
实现过程:例如:在第7个台阶,就有2种方法走到,第一种从6台阶跨到7台阶,第二种从5台阶跨到7台阶。所以每个台阶都有两种走法,要么走1步,要么走2步,
如果n台阶的走法用公式表达就是:f(n) = f(n-1)+f(n-2)
有了推导公式递归代码基本就完成了一半,接下来看看代码如何终止递归条件。当有一个台阶时,我们不需要在继续递归,就只有一种走法。所以f(1)=1,当n=2,f(2) =f(2-1)+f(2-2) ,f(2-2) = f(0) =1 ,表示0个台阶有一种走法,不过这样子看起来就不符合正常的逻辑思维了。所以我们可以把f(2) = 2作为一种终止条件,表示走2个台阶,有两种走法,一步走完或者分两步来走。实现代码:

int f(int n) 
{
   if(n == 1) return 1;
   if(n == 2) return 2; 
   return f(n-1)+f(n-2);
}

总之写递归代码的关键就是找到如何将大问题拆解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。

猜你喜欢

转载自blog.csdn.net/undiif123/article/details/88086318