递归分析
递归:通过自我调用来解决问题的函数
递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。
递归要注意:
1.递归出口
2.当前问题如何变成子问题
利用递归写一个阶乘函数,F(n),求n的阶乘
def f(n):
#递归出口
if n<= 1:
return 1
ans = n*f(n-1)
return ans
print(f(5))

汉诺塔问题




# n个盘子从A挪到C,借助B
def Move(n,A,B,C):
#递归出口
if n ==0:
return
#n-1个盘子从A挪到B
Move(n-1,A,C,B)
#第n个盘子从A挪到C
print("{}->{}".format(A,C))
#n-1个盘子从B挪到C
Move(n-1,B,A,C)
n = int(input())
Move(n,'A','B','C')
输入结果:

例题:数的计算
题目描述
输入一个自然数 n (n≤1000)n (n≤1000),我们对此自然数按照如下方法进行处理:
-
不作任何处理;
-
在它的左边加上一个自然数,但该自然数不能超过原数的一半;
-
加上数后,继续按此规则进行处理,直到不能再加自然数为止。
问总共可以产生多少个数?
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
6
输出
6
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码
将问题分解为若干个子问题:
上述的第二个操作相当于f(n)的方案等价于所有f(i)方案之和,i小于等于n/2
def f(n):
if n==0:
return 1
ans=1
for i in range(1,n//2+1):
ans +=f(i)
return ans
n=int(input())
print(f(n))

1万+

被折叠的 条评论
为什么被折叠?



