博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归函数的学习
阅读量:6658 次
发布时间:2019-06-25

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

分析以下代码

int dp(int i){  int& ans=d[i];    //为该表项声明一个引用,简化对它的读写操作。   if(ans>0) return ans;  ans=1;  for(int j=0;j
tmp+1?ans:tmp+1; } } return ans;}

这是个DAG下的动态规划。是矩形嵌套的dp函数。粘这个代码的原因是为了反复体会这个ans在这个递归函数中的使用技巧。for语句块是为了选出当前行下的dp(j)的最大值,然后ans在此充当了max的作用。

 

下面这个是八皇后问题的递归代码

void solve(int i, int n){    if(i == n)    {        print(n);        printf("\n");        num++;    }    else        for(int j =0;j
for(int j =0;j

仔细看这个for循环,当尝试到第i行的第j列时,这时的目的是判断(i,j)这个位置是否合法,如果合法就在标识数组中填1,如果不合法就填0。这时我们很容易把代码写成这个样子

for(int j =0;j

如果按照这种写法,分析一下:假如当前的(i,j)合法,然后我们把A[i][j]赋值为1,然后进入solve(i+1,n)的函数如果此时不能在该层找到合法的位置,退回上层,继续刚才未完成的for循环,所以A[i][j]此时等于1,而为得到更改。所以第二种方法错误。

这就是对于递归函数常犯的忘记修改标识变量的错误。

转载于:https://www.cnblogs.com/chaiwentao/p/3894667.html

你可能感兴趣的文章
安卓巴士两周年征文集合(截至2012-12-6)
查看>>
iOS:WebKit内核框架的应用与解析
查看>>
2.6 内核中的计时器和列表【转】
查看>>
Elasticsearch之批量操作bulk
查看>>
为什么你都听客户的,客户却不满意
查看>>
XMLHttpRequest Ajax 实例简介
查看>>
10个免费的javascript富文本编辑器(jQuery and non-jQuery)
查看>>
大脑提取每一个体素26领域的matlab代码
查看>>
jQuery-zclip实现复制内容到剪切板
查看>>
java环境配置错误集锦
查看>>
嵌入式智能视觉传感器技术及应用
查看>>
Delphi 中的 XMLDocument 类详解(16) - 节点列表中的第一个与最后一个节点
查看>>
配置ADO.NET类文件连接优化
查看>>
Yii2权威指南中文版及众包翻译平台
查看>>
HTML基础7--表格表单
查看>>
MSP430学习笔记2-跑马灯程序,熟悉定时器寄存器的配置。
查看>>
生成PDF的新选择-Phantomjs
查看>>
【干货合集】不免俗,咱们谈一谈这场“顺我者昌,逆我者亡的伟大技术革命”——区块链...
查看>>
JAVA设计模式之【抽象工厂模式】
查看>>
Javascript中currying的实现
查看>>