递归问题

来源:互联网 发布:suse linux samba 编辑:程序博客网 时间:2024/06/17 12:15

递归思想的引入:

NOIP2001:
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n<=1500001),然后对此自然数按照如下方法进行处理。
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.

输入格式:
一个自然数n(n<=1000)
输出格式:
一个整数,表示具有该性质数的个数。

f(6)=f(3)+f(2)+f(1)…
《one》递归一章有优化版,后期学习

全排列问题:
ABCDEFG
f(n)=n*f(n-1)
继续可以得出递推公式。

错位排列:信封问题
abcdefg
ABCDEFG

a放到C里面,如果c放到A,那么方案数是:
f(n-2)
如果c不放A,b不放B,d不放D…
很容易看出方案数是f(n-1)
那么f(n)=(n-1)(f(n-1)+f(n-2))
继续可以得出递推公式。