【算法】递归
递归是一个比较难理解的问题,但是递归是一种非常广泛的算法,如数据结构中的树和图都会应用队规的算法。一般大家会拿汉诺塔进行举例,但是还有更容易理解的例子。 周末你去看电影,然后你忘记了现在坐的是第几排了,电影院太黑了,看不清,没法数,怎么办? 这个时候就可以问递归解决了,于是你问前面的人是第几排,你想只要在他的数字上加一,就知道自己是第几排了。但是,前面的人也看不清是第几排呀,于是他也问他前面的人。就这样一排一排往前问,直到问道第一排的人,说我在第一排,这样一排一排再把数字传回来。 这是一个很标准的递归求解问题的分解过程。所有递归问题都可以用递归公式来表示。 总结一下,就是一个递归要满足三个条件: 1.一个问题的解可以分解成几个子问题的解 2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 3.存在递归终止条件 即写出一个递归函数,例子如下: f(n) = f( n-1) +1 其中,f(1) = 1 改成代码为: #python 3 def f(x:int) ->int: if ( n==1): return 1 return f( n-1) +1 再举个例子,假如这里有 n 个台阶,每次可以跨一个或者俩个台阶,请问走这 n 个台阶有多少种走法? 我们仔细想一下,实际上,我们可以根据第一步的走法把所有走法分为两类,第一类是第一步走了1个台阶