递推和递归(C语言)

本文深入探讨了递推和递归的概念、原理及其在C语言中的应用。递推涉及递推关系的建立、边界条件的确定以及求解步骤,递归则强调子问题的同构性和终止条件的重要性。文中通过帕斯卡三角形和斐波那契数列的例子详细解释了递推和递归的实现,并比较了两者的优缺点。同时,还讨论了如何将递推和递归相互转化,以优化算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

主要探究递推和递归之间的关系


提示:以下是本篇文章正文内容,本人可能有理解不到位的地方,请批评指正。

一、递推原理

1.递推概念

指从已知条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。

2.递推关系

指一个问题的结果与其子问题的结果之间的关系。

3.递推特点

可用递推算法求解的题目一般有以下两个特点:
1)问题可以划分成多个状态;
2)除初始状态外,其它各个状态都可以用固定的递推关系式表示。

4.递推详例

帕斯卡三角形是排列成三角形的一系列数字。在帕斯卡三角形中,每一行的最左边和最右边的数字总是1。对于其余的每个数字都是前一行中直接位于它上面的两个数字之和。
在这里插入图片描述

首先,我们定义一个函数 f(i,j),它将会返回帕斯卡三角形第i行、第j列的数字。然后,我们可以用下面的公式来表示这一递推关系:f(i,j)=f(i−1,j−1)+f(i−1,j)。

5.解决递推问题的步骤

1)建立递推关系式;(问题可以划分成多个状态;除初始状态外,其它各个状态都可以用固定的递推关系式来表示。实际解题中,题目不会直接给出递推关系式,而是需要通过分析各种状态,找出递推关系式。)
2)确定边界条件;
3)递推求解。

二、递归原理

1.递归的概念

递归指的是在函数的定义中使用函数自身的方法。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。递归函数在解决许多数学问题上起了至关重要的作用,比如计算一个数的阶乘、生成斐波那契数列等。

2.构成递归的条件

1)子问题须与原始问题为同样的事,且更为简单;
2)具有终止条件,也就是递归不能无限制地调用本身,须有个出口,化简为非递归状况处理。并且终止条件必须是在递归最开始的地方。

3.递归的模板

1.void recursion()  
2.{
     
3.   statements;  
4.   ... ... ...  
5.   recursion(); /* 函数调用自身 */  
6.   ... ... ...  
7.}  
8.   
9.int main()  
10.{
     
11.   recursion();  
12.}  

4.递归详例

(1)问题描述
斐波那契数列:1、1、2、3、5、8、13、21…,即第一项 f(1) = 1,第二项 f(2) = 1…,第 n 项目为 f(n) = f(n-1) + f(n-2)。求第 n 项的值是多少。
在这里插入图片描述
(2)问题分析
1)先确定f(n)的功能是求第n项的值;
2)当 n = 1或者 n = 2 ,我们可以轻易地知道结果f(1)=f(2)=1。所以递归结束条件可以为n<= 2 时&

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值