函数递推式

本文介绍了函数递推式的基本概念和作用,通过实例展示了如何使用递推式来反转字符串和计算阶乘,强调了递推基例和递推链条的重要性。递推式能够使代码更加简洁,提高代码的可读性和复用性。

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

函数递推式简单理解就是

函数+分支语句

主要作用是方便我们的计算

在其中有两个特别重要的特征:

1、基例:不需要再次递推的方法

2、链条:需要进行多次递推的方法

例如:我们要把字符串反过来,没有学习递推式之前我们写的代码:

str1=input()
print(str1[::-1])

但我们要让字符串反过来的代码更加优秀、完美、在什么地方都可以调用,这个时候就需要使用函数递推式了,如下

def str_reverse(n):
    """功能:反转字符串
       n:需要反转的字符串
    """
    if n=="":    #递推基例
        return n #当字符串为空时返回的是它本身
    else:        #递推链条
        return str_reverse(n[1:])+n[0]
print(str_reverse(input()))  #调用函数递推式

这段代码的运行过程如下

输入输出
n=你好
n=好

n=None好你

先是将“你”放在最后,然后把好带入函数中再执行一次

再例如,我们使用函数递推式解决n!

def factorial(n):
    """功能:计算数值的阶乘
       n:需要阶乘的数
    """
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
print(factorial(int(input()))

比如我输入的是5

内部返回
5*fact(4)120
4*fact(3)24
3*fact(2)6
2*fact(1)2
1*fact(0)1

函数递推式可以方便我们对函数体的多次利用,用最少行的代码完成更复杂的运算

### 动态规划函数递推的定义 在动态规划中,递推用于描述子问题之间的关系。这种表达方能够有效地减少重复计算并提高算法效率。对于给定的问题,通常会有一个状态转移方程来表示当前状态如何由之前的状态得出。 #### 定义与公 具体来说,在爬楼梯问题中,`dp[j]` 表示到达第 `j` 层的方法数[^1]。其递推可以写作: \[ dp[j] = dp[j - 1] + dp[j - 2] \] 这里假设每次可以选择走一层或两层楼。此公表明要达到某一层有两种可能的方:一是从前一层上来;二是从更前一层跳过一层而来。 另一个例子是在背包问题里提到的容积填充情况下的递推: \[ dp[j] += dp[j - nums[i]] \] 其中 \( j \) 是指容器的最大容量,而 \( nums[i] \) 则代表物品 i 所占用的空间大小。这意呸着如果选择了物品i,则剩余可用空间变为\( j-nums[i]\),此时方案总数应加上不选该物品时对应位置上的值。 #### 示例代码实现 以下是基于上述原理的一个简单 Python 实现,用来解决经典的斐波那契序列问题作为示范: ```python def fibonacci(n): if n <= 0: return 0 elif n == 1: return 1 # 初始化DP表 dp = [0] * (n + 1) dp[1] = 1 for i in range(2, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n] ``` 这段程序展示了如何利用一维数组存储中间结果以避免不必要的重复运算,并通过迭代而非递归来构建解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恰柠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值