马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
用斐波那契数列来说明:python递归:
def Fibonacci(n):
return 1 if(n<3) else Fibonacci(n-1)+Fibonacci(n-2)
print("斐波那契数列第%d项:%d" %(7,Fibonacci(7)))
迭代就不写了,就是从第一,第二项开始,一直往后推
这两个过程是相反的。递归一般都是解是唯一的(当然也可以把逼近迭代写成递归结构,不断递归来实现迭代,问题是编译器对递归层数是有限制的,而迭代100次的算是少的)
迭代许多时候用来逼近正解的,当然斐波那契数列是能求精确解的。大多数用迭代的问题可以迭代100步,也可以1000步。实际就是没有精确解
用python递归汉诺塔:def print_step(A,B):
print(A+"——>"+B)
return 0
def hanoi(n,A,B,C):
return print_step(A,C) if n==1 else hanoi(n-1,A,C,B)+print_step(A,C)+hanoi(n-1,B,A,C)
print("移动汉诺塔的步骤:")
hanoi(3, 'a', 'b', 'c')
这个用迭代就不行,因为斐波那契数列本来就是从起点开始的往后展开迭代结构(实际也是用迭代效率高,没有重复计算,递归中充满了重复计算),汉诺塔不是,他是要
移动N个盘子A->C=移动N-1个盘子到A->B,第N个盘子A->C,移动N-1个盘子到B->C
是一个x(N)问题变成x(N-1)问题的递归结构,并且没有从1如何到N的迭代过程,当然也可以反复判断现在应该是移动到A,还是B。问题是这还叫迭代吗?也有许多用pop,push手动栈来完成“迭代”的,这当然不叫迭代,这是手动递归。 |