鱼C论坛

 找回密码
 立即注册
查看: 2117|回复: 0

[学习笔记] 迭代和递归:感觉汉诺塔不能迭代

[复制链接]
发表于 2020-6-21 13:19:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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手动栈来完成“迭代”的,这当然不叫迭代,这是手动递归。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-17 15:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表