算法:递归

刚开始学习算法,遇到递归,其中两个十分吸引本人的例子,觉得像是脑洞大开。

1. n!=nx(n-1)x(n-2)x......x2x1;

    高中时候,n!一直都是手算,也没什么简便方法,然而递归这章让我眼前一亮

   -(int) simple1(int n)

{

    if(n==1)return;

    return (n*simple1(n-1));

}

如此反复调用simple1(),直到n为1,此时return的值为nx(n-1)x(n-2)x......x2x1;

由此,算法不是死板的运用数学知识,而是将其与计算机语言结合起来,遇到问题随机应变灵活运用。


2.一串斐波那契Fibonacci数列,也是高中时候甚至初中也常出现的数列:1,1,2,3,5,8,13,21,34,55.......

一个数是前两个数的和。

可以将这数列表示为:S(n)=1  ,n=0

                                        S(n)=1  ,n=1

                                        S(n)=S(n-1)+S(n-2),n>=2

-(int) Fibonacci(int n)

{

    if(n<=1)return 1;

    return (Fibonacci(n-1)+Fibonacci(n-2));

}

这就是用算法表示Fibonacci数列,然而用表达式的话,S(n)=

(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
同样也是十分麻烦,如果直接找规律,按照高中的数学知识,也得花很长时间。
也可以看出算法是将复杂的事情,做的更加简单。
之后的还有,棋盘覆盖等,都用到递归的思想。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
递归算法寻路是一种常见的图论算法,可以用于解决迷宫问题等。下面是用Python实现递归算法寻路的示例代码: ``` def find_path(maze, start, end): """ 递归算法寻路 :param maze: 迷宫矩阵,0表示可以通过,1表示障碍 :param start: 起点坐标,(x, y) :param end: 终点坐标,(x, y) :return: 找到的路径,如果没有则返回None """ # 判断当前位置是否越界或者是障碍 if not (0 <= start[0] < len(maze) and 0 <= start[1] < len(maze[0]) and maze[start[0]][start[1]] == 0): return None # 如果当前位置就是终点,则直接返回终点坐标 if start == end: return [end] # 标记当前位置已经访问过 maze[start[0]][start[1]] = 1 # 递归寻找上下左右四个方向能否到达终点 for next_pos in [(start[0] + 1, start[1]), (start[0] - 1, start[1]), (start[0], start[1] + 1), (start[0], start[1] - 1)]: # 递归寻找路径 path = find_path(maze, next_pos, end) if path is not None: # 如果找到了路径,则将当前位置添加到路径中,并返回路径 return [start] + path # 如果无法到达终点,则返回None return None ``` 使用示例: ``` maze = [ [0, 0, 0, 0, 0], [1, 1, 0, 1, 0], [0, 0, 0, 0, 0], [0, 1, 1, 1, 1], [0, 0, 0, 0, 0] ] start = (0, 0) end = (4, 4) path = find_path(maze, start, end) if path is None: print("无法到达终点") else: print("找到路径:", path) ``` 输出结果: ``` 找到路径: [(0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (4, 4)] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值