您的位置  > 互联网

码个坑,我很喜欢递归,也总结了一些经验

首先,我目前感觉对递归还没有一个统一的、好用的理解(意思是一种理解就能写好递归)。

除了最基本的:

1、递归就是先前进到终止条件,然后回溯。

2、递归就是函数调用本身; 函数嵌套直到最后一级函数调用结束(渐进式),并逐步返回到上一级调用点(回溯式)。

3.用二叉树来理解

这是最基本的理解,但是并不能帮助我们写好递归,甚至不能理解递归。

接下来分享一下递归的几个理解和例子,希望对读者有所帮助。

1.阶乘问题

这种问题只要有最基本的了解就可以解决。

2.经典的汉楼问题

在解决这个问题时,你必须意识到函数就是函数。

>1饼可以抽象为以下三个步骤:

A。 将除底部(大)饼之外的所有饼图从 a 轴经 c 轴移动到 b 轴 move(n-1,a,c,b)

b. 将最大的饼图从 a 轴移动到 c 轴 move(1,a,b,c)

C。 将b轴上的其他蛋糕从b轴经过a轴移动到c轴 move(n-1,b,a,c)

上述步骤解释如下:

1、从规则可以看出,在做步骤a和c的时候,其实可以忽略饼图最大的轴,所以无论移动到哪个轴都可以完成。 无需了解步骤中的具体步骤; 在生活中,我们可能习惯于了解具体的细节,这样的要求可能会让人感到不舒服。

好啦,写代码吧。 首先,明确函数函数的概念。 我们应该写什么函数? 显然是从? 通过?轴到? 轴函数。

(正在上课,有时间再写吧。

如果有时间继续代码)

如上所述,n 个蛋糕 move(n,a,b,c) 和 move(n-1,a,c,b) 实际上没有区别。

整个过程只有一个函数():move(n,a,b,c)

综上所述,我们可以写

char a='a',b='b',c='c';

移动(n,a,b,c){

if(n==1) 计算