递归
def f(n):
if n == 1:
return 1
return f(n-1) + n
print(f(5))
print(f(100))
def jieche(n):
if n == 1:
return 1
return jieche(n-1)* n
print(jieche(5))
def fibo(n):
if n in [1, 2]:
return 1
return fibo(n-1) + fibo(n-2)
print(fibo(6))
print(fibo(7))
数组的和
from random import randint
ls = [18, 57, 38, 57, 71, 67, 81, 4, 49, 60]
def sumLs(ls):
if len(ls) == 1:
return ls[0]
return ls[0] + sumLs(ls[1:])
print(sumLs(ls))
print(sum(ls))
def sumArray(ls):
def sum2Ls(ls, l=0):
if l == len(ls):
return 0
return ls[l] + sum2Ls(ls, l + 1)
return sum2Ls(ls, 0)
print(sumArray(ls))
数组排序
def ins(li, k):
if k==0:
return
ins(li, k-1)
x = li[k]
index = k - 1
while x < li[index]:
li[index + 1] = li[index]
index -=1
li[index+1] = x
print(li)
ins([1, 4, 3, 2], 3)
打印
def pri(f, e):
if f > e:
return
else:
print(f)
return pri(f+1, e)
pri(1, 6)
有一个有N个台阶的楼梯,你一次可以爬1或2个台阶。
给定N,编写一个函数,返回爬完楼梯的方式数量。步骤的顺序很重要。
例如,如果N是4,那么有5种方式:
1,1,1,1
2,1,1
1,2,1
1,1,2
2,2
如果规定的不是一次只能爬1或2步,而是可以使用正整数X集合内的任意数字爬楼梯,那会怎么样?例如,如果X = {1,3,5},则表示一次爬升1,3或5阶楼梯。 解决方案 从一些测试案例开始总是好的做法。让我们从小的案例开始,看看能否找到某种规律。
N = 1,1种爬楼方式:[1]
N = 2,2种爬楼方式:[1,1],[2]
N = 3,3种爬楼方式:[1,2],[1,1,1],[2,1]
N = 4,5种爬楼方式:[1,1,2],[2,2],[1,2,1],[1,1,1,1],[2,1,1]
你有没有注意到什么?请看N = 3时,爬完3阶楼梯的方法数量是3,基于N = 1和N = 2。存在什么关系?
爬完N = 3的两种方法是首先达到N = 1,然后再往上爬2步,或达到N = 2再向上爬1步。所以 f(3) = f(2) + f(1)。
这对N = 4是否成立呢?是的,这也是成立的。因为我们只能在达到第三个台阶然后再爬一步,或者在到了第二个台阶之后再爬两步这两种方式爬完4个台阶。所以f(4) = f(3) + f(2)。
所以关系如下: f(n) = f(n – 1) + f(n – 2),且f(1) = 1和f(2) = 2。这就是斐波那契数列。
当然,这很慢(O(2^N))——我们要做很多重复的计算!通过迭代计算,我们可以更快:
|