算法学习

本文介绍了算法的概念,通过最大公约数计算的例子展示了算法如何用递归方式解决问题,并探讨了算法与数据结构的关系及其重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法学习笔记-概念

计算机程序一般都是实现一种已有的方法来解决某个问题,与编程语言无关。算法描述了解决问题的步骤。
算法定义

算法就是:描述一种 有限、确定、有效并且适合用计算机程序来实现的解决问题的方法。

例子
自然语言描述:

计算两个非负整数的最大公约数(q&p):若q是0,则最大公约数是p。否则,将p除以q得到余数r,q和p的最大公约数即为q和r的最大公约数。

Java语言实现:

Public static int gcd(int p, int q)
{
    if (q == 0) return p;
    int r = p % q;
    return gcd(q, r);
}

这里定义了方法 gcd,然后又在 gcd 中调用了 gcd,即一个方法调用本身,是使用了递归的办法将大问题不断分解为小问题,直到最后得出结果。使用递归减少了代码量。
Python实现:

#--coding=utf-8--
def gcd(p, q):
    if q == 0:
        return p      #q为0的特殊情况
    r = p % q         #求p % q的余数
    return gcd(q, r)  #递归 调用本身

错误记录

用Python实现这个算法的时候出现了一个错误——定义 gcd的时候把p和q的位置互换了,导致报错 -RuntimeError: maximum recursion depth exceeded 。在网上查了,发现python默认的递归深度是很有限的,大概是900多的样子,当递归深度超过这个值的时候,就会引发这样的一个异常。
我这里错误的原因是传入参数时出了问题,递归时导致无限递归,超过了递归深度,从而引发了异常。
要是遇到超多的递归怎么办?
解决办法是手动设置递归深度:
import sys
sys.setrecursionlimit(10000) #例如这里设置为一万

数据结构
大多数的算法都需要适当的组织数据,为了组织数据就产生了数据结构。数据结构与算法的关系非常密切。
算法的必要性
用计算机解决一个问题可以有若干种不同的方法,小型问题只要能解决问题,方法的不同没有什么关系,在解决大型问题的时候我们的时间和资源总是有限的,因此我们就需要设计能够高效利用时间和资源的方法。研究算法的原因主要是它能节约非常多的时间或者资源。


认真学习第一天,坚持就是胜利!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值