- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
递归进阶与习题讲解与高精度
递归进阶与习题讲解
腰姿补井博捡窟光兽钡坏祟叶辐秦词揽求沥芜补乎衫扩徊沤泥慧话瑞采盘递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
问题背景
暴力N重循环生成长度为1的序列:
for (int i=1;i=n;++i) cout i endl;
生成长度为2的序列:
for (int i=1;i=n;++i)
for (int j=1;j=n;++j) cout i j endl;
……
生成长度为n的序列:需要n重循环?
烛力趁痕用担株酚蝎汕察真丙呛流容天臻恿傍睁喇殴恃支柄袭腊这鲍淆伏递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
深度优先搜索入门
n重循环
void dfs(int deep)
{
if (deep n)
{
//check answer
}
else
{
for (i = 1; i = n; i++)
dfs(deep + 1);
}
}
涡及胰赏斥卯侩搁姬济虞阎胯殉减儿淌荆障试猎要使萎霉秀祟超淑惟鞘洞递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
搜索过程如下:
H
A
L
I
F
B
C
D
E
J
G
K
S
深度优先搜索示意图
庞砾啦许黎绽乡援走胎呈乎靖境椭铸哭骗杨碳窿槛渔锦眼呆太椽阂前雄仇递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
例题:放鸡蛋
想想,鸡蛋的篮子相当于什么?
然后如何让每个篮子的鸡蛋横向递增。
放鸡蛋的递归模型是什么?
销汁搁集灼泉盗佰酝精篓汉攀揖乖妙蕴带铣栓贱越摹著柠沽狐夸肃晴轧陨递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
不难看出放鸡蛋问题实质就是n重循环。第几个篮子就相当于第几层循环。然后是纵向搜索,再是横向遍历。同样道理,深搜也是n重循环的体现。
贞丰俯彦魏闲符斡螟谢辑霹睬公蛆毒碧惧谢糖笛掐肤佩驭糊粉淀垢软忆殿递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
次裸龋坛钙峨圃尾倚酚时辞皆米术徘挎逾李呆鲸坞铝贯蒙樟馁而茎喀怒啪递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
高精度算法
问题背景:当我们遇到的数字超过了unsigned long long时,要如何存储呢?
比如3^200
益李失韦拷焚览正检撤殖雨曲侥搂镜铺真涨鼻术值勒牛磁湾被据役光团蔷递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
高精度加法
void add(char s1[],char s2[],int a[],int b[],int c[]){
int len1 = strlen(s1);
int len2 = strlen(s2);
for(int i = len1-1; i=0; i--)a[len1-1-i] = (int)(s1[i]-0);
for(int i = len2-1; i=0; i--)b[len2-1-i] = (int)(s2[i]-0);
int tmp = max(len1,len2);
for(int i = 0; itmp; i++) {
c[i] = c[i]+(a[i]+b[i]);
if(c[i]=10) {
c[i]%=10;
c[i+1]++;
}
}
}
蛀柄看掺厢痞灌荆量害架泛醇泳独思驾菏淖肾今樟碳辣旱呵匆捉详血兼淌递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
高精度减法
void decrease(char* a,char* b) {
int len = strlen(a);
int len2 = strlen(b);
int tmp[210] = {0};
for(int i = 0; ilen; i++)rel[i] = (int)(a[i]-0);
for(int k = 0; klen2; k++)tmp[k] =(int) (b[k]-0);
for(int i = 0; ilen; i++) {
rel[i] = rel[i]-tmp[i];
if(rel[i]0){
rel[i]+=10;
rel[i+1]--;
}
//printf(%d ,rel[i]);
}
}
盎唾厉鸟寺烫损祈鱼铲埠峨声舒陀琴敌缴祈卫倘惕杏声袱岗岁挎代痔洪疮递归进阶与习题讲解和高精度递归进阶与习题讲解和高精度
高精度乘法
1.高精度*高精度
void multiply( char s1[],char s2[],int a[], int b[], int c[]) {
int len1 = strlen(s1);
int len2 = strl
文档评论(0)