![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法----递归
大章鱼(张文哲
你所做的别只停留在 还行
展开
-
递归
定义:在一个函数中再次调用该函数自身的行为叫做递归,这样的函数被称作递归函数。基础应用:有明显递归式例如,我们想要编写一个计算阶乘的函数int fact(int n),当然,用循环来实现也是可以的。但是根据阶乘的递推式n! =n*(n-1)!,我们可以写成如下形式:typedef long long ll;ll fact(int n){ if(!n) ...原创 2020-03-19 13:54:05 · 263 阅读 · 1 评论 -
象走田
问题描述:象在中国象棋以田字形规则移动。请编写一段程序,给定n*m大小的棋盘,对于象的初始位置(0,0),计算象最多多少步可以走完棋盘上的可行点。样输入例15输出样例13问题分析:根据马走日改编而来,基本思路跟马走日差不多,只是多了步判断象终止的条件以及象可行走步数的不断更新问题。反正简单得很。。。。。代码实现:#include<cstdio>#includ...原创 2019-05-12 23:07:55 · 1816 阅读 · 0 评论 -
马走日
关键词:递归、回溯、搜索#include<cstdio>int n;int a[8]= {-2,-1,1,2,2,1,-1,-2};int b[8]= {-1,-2,-2,-1,1,2,2,1};int count=0;int c[100][100]= {0};void dfs(int x,int y,int t) { if(t==n*n) { count++;...原创 2019-05-12 23:12:42 · 285 阅读 · 0 评论 -
前缀表达式求值
前缀表达式求值(逆波兰表达式求值)#include<cstdio>#include<cstdlib>#include<iostream>using namespace std;double exp() { char a[10]; cin>>a;//去当前输出的字符串 switch(a[0]) {//看第一个字符是否是运算符 ca...原创 2019-05-11 21:58:51 · 822 阅读 · 0 评论 -
n阶皇后问题
n阶皇后问题#include<cstdio>#include<cmath>int a[100]= {0};int n;int sum=0;void dfs(int k) { if(k==n) {//当满足条件时输出 for(int i=0; i<n; ++i) { printf("%d ",a[i]+1); } sum++;//计算不...原创 2019-05-11 21:54:06 · 433 阅读 · 0 评论 -
倒序输出一个正整数问题
倒序输出一个正整数问题#include<cstdio>void fact(int n) { if(n>=0&&n<10) printf("%d",n);//递归出去条件 else { if(n<0) {//判断是否是负数情况 printf("-"); n=-n; } printf("%d",n%10);//先输出...原创 2019-05-11 21:48:40 · 2287 阅读 · 0 评论 -
阶乘
阶乘剪枝#include<cstdio>long long a[1000000]={0};//还是剪枝问题,防止重复计算 long long fact(int n){ if(n==1||n==0) return 1; else if(a[n]) return a[n]; else return a[n]=fact(n-1)%100000007*n%100000007...原创 2019-05-11 21:44:42 · 146 阅读 · 0 评论 -
斐波那契数列
斐波那契数列剪枝问题#include<cstdio>long long a[1000000]= {0};//用剪枝,减少重复计算次数 long long fact(int n) { if(a[n]) return a[n]; else if(n==1||n==2) return 1; else return a[n]=(fact(n-1)+fact(n-2))%...原创 2019-05-11 21:40:53 · 188 阅读 · 0 评论 -
0-1背包
问题描述:0-1背包(0-1 knapsack):有一个背包,体积为V,现在有 n 个物体,且物体 i 的价值为 pi,要求在不超过背包体积 V 的情况下背包中放入物体的最大价值之和;如:4 82 14 12 43 3问题分析:#include<cstdio>#include<algorithm>using namespace std;int n...原创 2019-05-15 09:21:30 · 312 阅读 · 0 评论 -
最长公共子序列
问题描述:给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA问题分析:使用递归的基础之上,进行了相应的剪枝操作,避免重复计算。代码实现:#include<cstdio>#include<cstrin...原创 2019-05-14 09:05:04 · 289 阅读 · 0 评论 -
二分查找问题
问题描述:反正就是一个给定序列,让你排个序,在查个数在哪,ok!!!问题分析:反正程序可以这么简单易懂,直接上代码!!二分查找问题,BinarySearch问题#include<cstdio>#include<algorithm>using namespace std;void BinarySearch(int a[],int m,int L,int R...原创 2019-04-23 09:17:30 · 320 阅读 · 0 评论 -
Hanoi问题
问题描述:对于输入的n的盘子,输出Hanoi塔的步骤或者是最小步数。问题分析:太简单了,不分析了,直接看代码。简洁明了Hanoi塔问题#include<cstdio>void Hanoi(int n,char a,char b,char c) { if(n) { Hanoi(n-1,a,c,b);//现将n-1个盘子通过c移到b上 printf("%c - %c...原创 2019-04-23 08:35:26 · 540 阅读 · 0 评论 -
整数划分
【问题】将整数n表示为一系列正整数的和。n = n1 + n2 + …+ nk (n1 >= n2>=…>=nk>=1,k>=1) 并称之为n的划分。不同的划分个数称为正整数n的划分数,求可划分整数的总数递归实现:#include<cstdio>int fact(int n,int m) { //n为当前所划分整数,m为所划分整数最大值 if(...原创 2019-04-17 10:54:28 · 372 阅读 · 0 评论 -
全排列问题
//c++库函数调用#include<cstdio>#include<algorithm>using namespace std;int main() { int a[100]; for(int i=0; i<5; ++i) a[i]=i+1; do { for(int i=0; i<5; ++i) printf("%d ",a[i...原创 2019-04-17 10:39:52 · 272 阅读 · 0 评论 -
全排列问题
递归写法:// A code blockvar foo = 'bar';// An highlighted block#include<cstdio>void ArrayArrange(int a[],int begin ,int end){ if(begin==end) {//终止条件 for(int i=0;i<=en...原创 2019-04-17 10:26:43 · 157 阅读 · 0 评论