分治算法

算法笔记——递归练习

你离开我真会死。 提交于 2019-11-26 05:58:42
1、分治思想与递归手段 首先,分治的英文是divide and conquer, 也就是分而治之的意思,基本策略是将原问题划分为若干个规模较小而结构与原问题相同或相似的子问题,然后分别解决这些子问题,最后合并子问题的解就能得到原问题的解。 一般我们都是使用递归的手段去实现分治思想 2、递归 概念:通过反复调用自身函数, 但是每次都把问题范围缩小,直到范围缩小到可以直接得到边界数据的结果,然后再在返回的路上求出结果。正是因为递归与分治的思想非常接近,所以我们会递归来解决分治问题。 递归的两个重要概念:递归边界与递归式。递归式是将原问题分解为若干个子问题的手段,递归边界则是分解的尽头 3、递归的具体例子练习 阶乘: n!= n * n-1 * n-1 * ... * 1, 写成递归式就是 n! = ( n-1 ) ! * n, 可以看出跳出递归的边界就是n为1或0的情况(因为1!=0!=0 ,所以都可以作为递归边界) #include<stdio.h> #include<iostream> using namespace std; int f(int n) { if(n == 0) return 1; //这个判定就是递归边界 else return f(n-1) * n; //f(n) = f(n-1) * n就是递归式 } int main() { int n; cin>>n;