您的位置  > 互联网

(知识点)递归算法的思想是什么?

f(n)=nf(n-1))。

代码 def func(n):IFN==1: 1 else: * func(n-1)print(func)3) 2.递归算法的思想是

358:///我们可以通过判断上述两个特征是否存在来判断能否递归地解决问题。

当我们发现问题可以递归解决时,我们来看看解决递归问题的一般思路。

1. 你在学习过程中遇到了一个非常陌生的单词1。 你不知道它是什么意思,所以你打开字典,在字典里找到了它的解释,但是在解释它的句子中,还有一个不熟悉的单词2,所以你在字典中查找单词2的解释。 结果,单词2中也有一个陌生的单词3。你继续在字典中查找,重复这个过程,直到找到这个单词的解释。 如果没有新词出现,那么“通过”的过程就结束了;

2.但是我们不要忘记,我们的初衷是要找到第1个单词的含义(就像解决一个又一个错误时,最后几乎忘记了原来的错误是什么),那么我们需要从最后一个单词开始,解释一步一步向上,直到我们首先想知道的这个词的解释。 这就是“回归”的过程

三。 汉诺威问题的实际练习如下所示。 从左到右有 A、B、C 三根柱子。 A柱上从小到大叠放了N个圆盘。现在需要将A柱上的圆盘移到C柱上。同时,只有一个原则。 一次只能移动到一个盘子,大盘子不能放在小盘子上。 了解练习的步骤和时间。

根据拆除理念:

1.定义递归并阐明函数:A上的N个磁盘通过b移动到C。

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

2.找出问题与子问题之间的关系(递归公式())))))))))65))))))

首先我们看一下当只有两个圆盘时A是如何移动的。

分析问题与问题之间的关系。 将N个盘转移到C列到B列可以通过以下三个步骤进行分析。

把上面的n-1个盘当成一个盘,分析思路和上面只有两个盘的思路是一致的。

将上面的n-1个圆盘通过c移动到B。

移动(n-1,a,c,b))。

此时将A下最大的圆盘移至c处。

然后,将B上面的n-1个盘通过a转移到C上。

移动 (n-1, b, a, c))))。

注:既然已经定义了这个函数的作用,那么下次n-1个磁盘通过c移动到B时自然就可以调用这个函数了。 因此,明确其功能非常重要。 根据函数的功能描述,递归问题其实很容易分析。 将第一步中的n-1从C移动到B,重复上述过程。 如果上面的n-2块木板经过A移动到B,那么A的下面的木板移动到C,最后上面的n-2块木板经过A移动到B的下面。规律找到了。 但是,在寻找问题时,不能将子问题扩展到多个层次。 这样就会陷入递归陷阱,导致计算机的堆栈溢出。 人脑当然是这样的。

代码(n,a,b,c): IFN==1: print(a(a,-,c) else: move(n-1,a,c,b) print)