简单递归应用
来源:互联网 发布:mac qq怎么发离线文件 编辑:程序博客网 时间:2024/05/15 23:51
递归是一种十分神奇的东西,所以有必要好好的研究研究一下它
还记得上次的递归逆序吗—-题目一 递归逆序
解法很精彩,利用递归的特性,递是梳理问题,归是解决问题。所以在递归返回时解决了字符逆序的问题。
再看一例
输入一个数字n,打印出n的全排列
#include<stdio.h>#define max 20int a[max],book[max]={0} ,n;void dfs(int step){ int i; if(step==n+1) { for(i=1;i<=n;i++) printf("%d ",a[i]); putchar('\n'); return; } for(i=1;i<=n;i++) { if(book[i]==0) { a[step]=i; book[i]=1; dfs(step+1); book[i]=0; } } return; }int main(){ scanf("%d",&n); dfs(1); return 0;}
解题模板
void dfs(int step){ 判断边界 尝试每一种可能 for(i=1;i<=n;i++) { 继续下一步 dfs(step+1) } 返回}
再看一例
利用递归解决 口口口+口口口=口口口
#include<stdio.h>#define max 20int a[max],book[max],total=0;void dfs(int step) { int i; if(step==10) { if(a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9]) { total++; printf("%d%d%d+%d%d%d=%d%d%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]); } return; } for(i=1;i<=9;i++) { if(book[i]==0) { a[step]=i; book[i]=1; dfs(step+1); book[i]=0; } } return;}int main(){ dfs(1); printf("total=%d",total/2); return 0;}
小结
递归是十分的难以理解的,往往是因为无法理解其内在的联系,最佳的理解方式就是自己手动演算一遍或者多遍,依次达到融会贯通的效果
阅读全文
2 0
- 递归的简单应用
- 简单的递归应用
- 简单递归应用
- 递归算法的简单应用
- 递归在数组中的简单应用
- ACM_1088滑雪(递归的简单应用)
- 关于递归的一些简单应用
- ZJU_BASIC LEVEL_1017 大数相除 递归的简单应用
- 【我会的都很简单】递归的应用
- 黑马程序员-File类+递归的简单应用
- Python练习(1):递归和动态规划的简单应用
- 递归应用
- 递归应用
- 递归应用
- 递归--应用
- 递归应用
- 递归应用
- 简单递归
- 快学Scala习题解答—第一章 基础
- ubuntu神经网络部署说明
- Ext.js学习心得二
- C语言程序设计-图书管理系统
- CPU使用情况
- 简单递归应用
- mysql数据库中存照片
- pat 1014. Waiting in Line
- 文件相关
- U-Mail邮件系统带您体验微信收发邮件
- 去除input选中时出现的蓝框
- Java的常用类
- saltstack 学习一 (安装)
- C语言程序设计-计算机设备管理