一、观看PPT教程
【01】递归算法
二、练习题(不清楚回头查看有关PPT)
【01】下面是递归算法的有关描述,如果有错误的地方,请改正:
基本思想——递归算法是一种通过函数直接或者间接调用自身来解决问题的方法。将一个大问题层层转化为一个或多个与原问题相似的规模较小的子问题,直到某个子问题可以直接求解,然后一层层返回得到最终结果。使用递归算法的必要条件——1)子问题具有相同的结构:递归算法的关键是将问题分解成一个或多个子问题,并且子问题与原问题具有相同的结构。这样,我们可以通过递归地解决子问题来解决原问题。2)子问题规模更小:递归算法要求子问题的规模比原问题的规模更小,这样才能通过递归不断地将问题分解,直到某个子问题可以直接求解。3)存在递归终止条件:递归算法需要定义递归的终止条件,当满足终止条件时,递归终止,直接返回结果。4)存在合并子问题的操作:递归算法在递归求解子问题之后,需要将子问题的解合并起来,得到原问题的解。递归算法分类——1)直接递归:即在函数中调用函数本身。2)间接递归:即间接地调用一个函数,如fun_a调用fun_b, fun_b又调用fun_a。【02】下面是“求5的阶乘”的递归算法代码,请改正:
·
·
·
·
·
·
·
·
·
·
·
·
·
·
#include<iostream>using namespace std;int fact(int n){ int temp = n * fact(n-1); if(n == 1) return 1; else return temp;}int main(){ int result = fact(5); cout << result << endl; return 0;}
【03】下面是递归过程的描述,如果有错误,请改正:1.递归算法执行过程分为递推和回归两个阶段。递推时并没有求值操作,实际计算操作是在回归过程中实现的;2.递推阶段是一个不断简化问题的阶段,将复杂问题转化为比原问题规模更小的子问题。(如:对fact(5)的求解转化为fact(4)的求解,对fact(4)的求解转化为 fact(3)的求解...直到转化为对fact(1)求解);3.递推到终止条件时,返回结果;4.在回归阶段,当获得规模更小的子问题解后,逐层返回,依次得到问题的解。(如:先得到 fact(1)的解后,再得到fact(2)的解...直到得到fact(5)的解)。
【04】编程题:汉诺塔
【05】递归算法总结,如果有错误的地方,请改正:
1.递归算法将复杂的问题分解为更小、更简单的子问题。通过递归调用自身,在每一层中处理当前子问题,并继续递归处理子问题的子问题,最终得到问题的解决方案。2.递归算法的代码通常比迭代算法更简洁、易于理解。递归通过函数自身的调用来实现循环结构,代码结构更接近问题的本质,从而更容易表达问题的解决思路。3.递归算法可能导致函数调用的嵌套层级过深,从而消耗较多的堆栈空间。在处理大规模问题时,递归深度可能会导致栈溢出的问题,需要注意设置递归终止条件或改用迭代算法。4.递归算法在处理问题时可能会重复计算相同的子问题,导致性能下降。可以通过使用记忆化的方式(如缓存中间结果)来避免重复计算,提高算法效率。5.递归算法必须设置递归终止条件,以防止无限递归调用。总之,递归算法是一种强大且灵活的问题解决方法,适用于处理递归结构、深度优先搜索等问题