博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随手练——几个递归小题目
阅读量:5093 次
发布时间:2019-06-13

本文共 1470 字,大约阅读时间需要 4 分钟。

递归最重要的两点:

1.base case(递归出口)。必须有某些基本情形,它无需递归就能解出。 

2.分解 或者 分类。分解成子问题,或者每层递归分叉,也就是一个N叉树模型。

 例题:

  • 打印一个字符串的所有子串

分解:按顺序每个字母是否打印,分解。

 base case: 当 pos==length,分解到了最后一步

void process(char *s,int pos,int length,string res) {    if (pos == length) {        cout << res << endl;        return;    }    process(s, pos + 1,length,res);    process(s, pos + 1, length, res + s[pos]);}int main() {    char str[] = "abc";    process(str, 0, 3,"");    return 0;}
  • 打印一个字符串的全排列

那里是否交换回来,都可以打印出来全排列,但是最后出来的顺序是不一样的,想要严格字典序,不换回来。

void process(string s, int n) {    if (n == s.length()) {        cout << s << endl;        return;    }    for (int i = n; i < s.length(); i++) {        swap(s[i], s[n]);        process(s, n + 1);        //swap(s[i], s[n]);    }}
  • 给定一个数组,数组中元素能否累加得到 指定值aim

要注意带返回值的递归函数写法:

bool recur(int *a, int n,int res,int aim,int length) {    if (n == length || res == aim) {        return res == aim;    }    return recur(a, n + 1, res + a[n], aim,length)|| recur(a, n + 1, res, aim,length);    }
  • 不是所有题目都适合用递归

比如:HDU 2018:

两种解法,虽然递归解法要短很多,但是时间上,填表要快很多,因为递归会重复计算已经算过的值:

#include 
using namespace std;int a[55];int f(int n) { if (n <= 4) return n; return f(n - 1) + f(n - 3);}int main() { int n; a[1] = 1; a[2] = 2; a[3] = 3; a[4] = 4; for (int i = 5; i < 55; i++) { a[i] = a[i - 1] + a[i - 3]; } while (cin >> n) { if (n == 0)break; cout << a[n]<< endl; } return 0;}

 

转载于:https://www.cnblogs.com/czc1999/p/10357290.html

你可能感兴趣的文章
{面试题4: 替换空格}
查看>>
Centos 03 基础命令
查看>>
cNoteSetColor_命令窗口颜色设置
查看>>
!学习笔记:前端测试 、前端调试、console 等
查看>>
Eclipse内置Tomcat的配置
查看>>
NOIp2018集训test-9-17(pm)
查看>>
bzoj 1414: [ZJOI2009]对称的正方形
查看>>
centos安装rvm报错@curl -L get.rvm.io | bash -s stable fails on cent OS
查看>>
Js/Jquery获取input file的文件名
查看>>
51Nod 1109 01组成的N的倍数
查看>>
js-Date()对象,get/setFullYear(),getDay()编程练习
查看>>
Oracle_视图_索引_plsql_游标_存储过程_存储函数_触发器
查看>>
足球——2011-2012意甲球队队标
查看>>
IE7 绝对定位z-index问题
查看>>
Cogs 2221. [SDOI2016 Round1] 数字配对(二分图)
查看>>
菜鸟学习Dubbo
查看>>
Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)
查看>>
树莓派GPIO点亮第一个led
查看>>
ping 和 远程桌面 与防火墙的关系
查看>>
shell 命令 netstat 查看端口占用
查看>>