递归算法与数学归纳法解析

1、函数 f(n) = ⎧⎪⎪⎨⎪⎪⎩ 1 if n = 0, f(n −1) × n if n > 0 计算的是什么?

该函数计算的是 n 的阶乘,即 n!

2、考虑由以下递归定义定义的序列:sn = sn−1 + 3。分别在以下两种情况下计算该序列的前四项:(a) s0 = 0;(b) s0 = 4。并给出两种情况下sn的非递归定义。

情况(a):前四项为 $ s_0 = 0 $,$ s_1 = 3 $,$ s_2 = 6 $,$ s_3 = 9 $;非递归定义为 $ s_n = 3n $。

情况(b):前四项为 $ s_0 = 4 $,$ s_1 = 7 $,$ s_2 = 10 $,$ s_3 = 13 $;非递归定义为 $ s_n = 3n + 4 $。

3、用数学归纳法证明以下与几何级数相关的恒等式,其中n是正整数,x≠1是某个实数:∑(i = 0到n - 1) x^i = (x^n - 1) / (x - 1)。

  1. 基础步骤 :当n = 1时,等式左边为∑(i = 0到0) x^i = x^0 = 1,等式右边为(x^1 - 1) / (x - 1) = 1,左边等于右边,基础步骤成立。

  2. 归纳步骤 :假设当n = k(k为正整数)时等式成立,即∑(i = 0到k - 1) x^i = (x^k - 1) / (x - 1)。
    当n = k + 1时,∑(i = 0到k) x^i = ∑(i = 0到k - 1) x^i + x^k。
    根据归纳假设,∑(i = 0到k - 1) x^i = (x^k - 1) / (x - 1),所以
    ∑(i = 0到k) x^i = (x^k - 1) / (x - 1) + x^k
    = (x^k - 1 + x^k(x - 1)) / (x - 1)
    = (x^k - 1 + x^(k + 1) - x^k) / (x - 1)
    = (x^(k + 1) - 1) / (x - 1)。

即当n = k + 1时等式也成立。
由数学归纳法可知,对于任意正整数n,∑(i = 0到n - 1) x^i = (x^n - 1) / (x - 1)成立。

4、设n为某个正整数。考虑确定n的二进制表示中设置为1的位数的问题(即n以2为基数表示)。例如,对于n = 25₁₀ = 11001₂(下标表示数字的基数),结果是有三位设置为1。请指出问题的规模,并给出该规模的数学表达式。

问题的规模是n的二进制表示中的位数,数学表达式为⌊log₂n⌋ + 1(n > 0)。

5、考虑将非负整数 n 的各位数字按“正常”顺序垂直打印到控制台的问题,即最高位数字必须显示在第一行,次高位数字显示在第二行,依此类推。例如,如果 n = 2743,程序必须在控制台打印以下几行:2

7
4
3。指出问题的规模及其基本情况。为一般的非负输入整数 n = dₘ₋₁ ⋯d₁d₀ 说明问题的分解,以及如何根据子问题的结果恢复原问题的解。最后,推导递归情况并编写该方法的代码。

问题规模

问题的规模是整数 n 的位数。

基本情况

当 n 只有一位数(即 n < 10)时,算法只需直接打印 n。

分解说明

对于一般的非负整数 n = dₘ₋₁ ⋯d₁d₀,可将问题分解为打印最高位数字 dₘ₋₁ 和处理剩余数字 dₘ₋₂ ⋯d₁d₀ 两部分。

恢复解

先打印最高位数字,再递归处理剩余数字,将它们的输出组合起来就是原问题的解。

递归情况

先处理 n // 10 以打印除最低位外的其他数字,然后打印 n % 10。

代码实现

def print_digits_vertically(n):
    if n < 10:
        print(n)
    else:
        print_digits_vertically(n // 10)
        print(n % 10)

6、求解以下递推式,但不计算乘法常数(Ci)。因此,在本题中不需要考虑初始条件。a) T(n) = 4T(n - 1) - 5T(n - 2) + 2T(n - 3) + n - 3 + 5n² ⋅ 2ⁿ b) T(n) = T(n - 1) + 3ⁿ - 3 + n³ ⋅ 3ⁿ c) T(n) = 5T(n - 1) - 8T(n - 2) + 4T(n - 3) + 3 + n² + n2ⁿ

a) 先求齐次部分 T(n) - 4T(n - 1) + 5T(n - 2) - 2T(n - 3) = 0 的特征多项式 x³ - 4x² + 5x - 2,因式分解为 (x - 1)²(x - 2),齐次解形式为 C₁1ⁿ + C₂n1
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值