递归程序求解问题的通用法则

算法导论-4递归关系 目录 1. 利用数列知识 2. 替换法(代换法) (1)猜测解-->数学归纳法证明; (2)变量变换法; 3. 迭代法 (1)展开法; (2)递归树法; 4. 主定理(主方法求解递推式) 5. 补充:递归与分治法(sch1) 递归设计技术 递归程序的非递归化 算法设计 (1)Fibonacci数 (2)生成全排列 (3)二分查找 (4)大整数乘法 (5)St... 阅读详情
编写递归程序有几个重要的原则可以遵循:
    1. 要解决的问题可拆分为几个与原问题类似的子问题(子问题仍可拆分)。
    2. 每个子问题必须比原来问题的规模更小(即使小一号也行,当然如果能够迅速减小规模更好)。
    3. 遇到足够小的子问题时就直接解决之,防止问题无限细分下去,也就是防止无限递归(递归终止条件很重要)。 
先看一个最简单的递归程序,下面程序求整数n的阶乘:
int factorial(int n)
{
    return n <= 1 ? 1 : n*factorial(n-1);
}
所谓递归程序,就是程序在执行中又调用其自身,如上面函数factorial在其函数体内调用了函数factorial。函数在每次被调用时都会生成一个包含自身局部变量的副本,即算是函数调用自身时也是如此。
递归程序主体主要由两部分构成:一是递归执行部分,包含递归执行所需的条件;一是递归终止部分,含递归终止条件。上面求阶乘的程序中把这两部分写在一行代码里面,把其分别抽出来便是:
int factorial(int n)
{
    if(n <= 1) return 1;     // 递归终止体
    return n*factorial(n-1); // 递归执行体

}


下面以几个经典算法问题的递归程序求解为例来分析编写递归程序中可以遵循的简单规则。
1. 求正整数n所有可能的和式的组合,如给定正整数3,所有和加起来等于3的和式如下:
3 = 3 + 0
3 = 2 + 1
3 = 1 + 1 + 1
其中一个和式中的因子只能为自然数,因子允许重复出现。

这个问题是一个组合问题的变形,用递归程序实现如下(分析见注释):
#define MAXSIZE 50       
static int buff[MAXSIZE]; // 存储和式因子组合的缓冲
/// 求当前和式中因子之和。
int Sum(int buff[],int i)
{
    int sum = 0;
    for(int m=0; m<=i; m++)
        sum += buff[m];
    return sum;
}
/// 打印当前满足条件的和式。
void printFactor(int buff[],int i,const int number)
{
    int count = 0, m;
    for(m=0; m<=i; m++)
        printf("%4d",buff[m]);
    if(number==buff[0])
        printf("%4d",0);
    printf("/n");
}
/// 递归求解所有和式组合。
/// i - 当前可选自然数的最大值。
/// top - 当前组合中因子个数。
/// number - 问题中要求解和式的正整数。
void divide(int i,int top,int number)
{   
    for(int j=i; j>0; j--)               // 注意这里的循环条件,可以有效防止出现重复的组合
    {
        buff[top ] = j;

        if(number == Sum(buff,top))      // 首先要确定递归中止条件
            printFactor(buff,top,number);
        else if(number < Sum(buff,top))  // 继续增加和式中的因子
            continue;

        if(top >= number)                // 和式中的因子不应该超过和的大小
            continue;

        divide(j,top+1,number);          // 减小问题规模,继续递归
    }
    return;
}

int main()
{
    int i,top = 0;
    int number = 8;
    printf("input a souce number:");
    scanf("%d",&number);
    i = number;
    divide(i,top,number);

    return 0;
}

2. 给定正整数k,以及1-k共 k个正整数的一个排列,假如是 1,2,3,...,k,求所有和此排列“不相交”的排列。
所谓不相交,是指新的排列和已有排列在同一位置上的数都不相同。如假设k=3,则其排列:
1 2 3 和 3 2 1是相交的,因为第二个位置上都是2;而排列1 2 3 和 3 1 2则不相交。

问题分析:此问题是普通排列问题的变形,只要在排列问题的递归程序中加上位置的限制即可,程序实现如下,具体分析见注释。
const int N = 5;
int range[9] = {1,2,3,4,5,6,7,8,9}; // 预定义好位置的排列
/// 判断当前选择的数j是否已经被使用。
bool selected(int j, int* buffer)
{
    for(int i=0; i<N; i++)
        if(buffer[i]==j)
            return true;
    return false;
}
/// 求不相交排列。
/// i - 当前排列的位置或者说当前排列元素个数。
/// buffer - 存储当前排列的数组。
/// count - 存储不相交排列的数目。
void arrange(int i, int* buffer, int& count)
{
    if(i == 0)                      // 递归终止条件
    {
        for(int k=0; k<N; k++)
            cout << buffer[k] << " ";
        cout << endl;       
       
        count++;
        return;
    }

    for(int j=1; j<=N; j++)         // 循环挑选当前位置可以放置的数
    {
        if(selected(j,buffer))      // 判断当前选定的数是够已经用过
            continue;

        buffer[i-1] = j;
        if(buffer[i-1] == range[i-1]) // 回溯的限制条件,同一位置的数不能和预定义的排列中相应位置的数相同
            continue;

        arrange(i-1,buffer,count);   // 继续递归
    }

    buffer[i-1] = 0;                 // 回溯,重新初始化当前位置
}

int main()
{
    int buffer[N] = {0};
    int count = 0;
    arrange(N,buffer,count);
    cout << count << endl; 
    return 0;
}

递归程序求解问题虽然优美简洁,但是和相应的非递归程序比较,随着问题规模的增大,程序的效率会逐渐下降,这也是递归程序的一大缺陷。

Copyright@戴维 2006.11  于北京

JAVA经典百题之猴子吃桃子问题 在这个问题中,逆向递推法是最简单、直观的解法,适用于特定问题。数学求解法在理解数学推导的前提下也是一种清晰的解法。递归法则更加抽象和通用,但可能会受限于递归深度。对于这个具体问题,推荐使用逆向递推法或数学求解法,因为它们简单、直观且具有较好的性能。递归法在理解和实现上更为复杂,而且可能在天数较大时效率较低。 阅读详情

相关推荐

递归与回溯算法精解:从N皇后问题掌握约束满足与状态回退

在计算机科学中,递归是一种通过函数自我调用来解决可分解子问题的核心编程范式,而回溯法则是在解空间中进行系统性试错搜索的通用算法框架。其技术价值在于能够高效解决诸如排列组合、图着色、数独等约束满足问题,通过“选择-探索-回退”的机制避免无效搜索。在工程实践中,递归与回溯常被应用于路径规划、资源调度及游戏AI等场景。理解其原理的关键在于掌握状态管理,尤其是递归调用后的状态回退,这正是避免无限递归和软件卡死的核心。本文以经典的N皇后问题为例,深入剖析如何利用递归实现回溯,并分享高效的状态检查与剪枝优化技巧,帮助开

weixin_30599769的博客 424

程序员必备的基本算法:递归详解

前言 递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它。在日常工作中,统计文件夹大小,解析xml文件等等,都需要用到递归算法。它太基础太重要了,这也是为什么面试的时候,面试官经常让我们手写递归算法。本文呢,将跟大家一起学习递归算法~ 什么是递归? 递归的特点 递归与栈的关系 递归应用场景 递归解题思路 leetcode案例分析 递归可能存在的问题以及解决方案 什么是递归? 递归,在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。简单来说,递归

m0_50180963的博客 1165

回溯算法精解:旅行商问题的核心原理与Python实战

回溯算法是一种通过系统性地尝试所有可能解,并利用剪枝策略避免无效搜索的通用问题求解范式。其核心原理在于深度优先搜索结合约束检查,当发现当前路径无法产生更优解时立即回溯,从而大幅缩减搜索空间。这一技术价值在于为NP-hard等复杂组合优化问题提供了可行的精确或近似求解思路,尤其适用于解空间巨大但需在有限时间内获得优质解的场合。在物流配送路径规划、电路板钻孔顺序优化、基因测序片段组装等实际应用场景中,回溯算法通过剪枝技巧能有效处理中小规模旅行商问题。本文以旅行商问题为例,详细剖析了回溯算法的实现框架、关键剪枝条

weixin_34195142的博客 418

一文教你学会递归解题

前言 递归是算法中一种非常重要的思想,应用也很广,小到阶乘,再在工作中用到的比如统计文件夹大小,大到 Google 的 PageRank 算法都能看到,也是面试官很喜欢的考点 最近看了不少递归的文章,收获不小,不过我发现大部分网上的讲递归的文章都不太全面,主要的问题在于解题后大部分都没有给出相应的时间/空间复杂度,而时间/空间复杂度是算法的重要考量!递归算法的时间复杂度普遍比较难(需要用到归纳法等...

aixuexidemomo的博客 636

开关变换器分析:大信号模型与小信号模型

是电力电子系统建模中的两类基本方法,分别用于描述系统在不同工作条件下的动态行为。它们的核心区别在于是否对变量进行线性化近似,以及适用的分析场景。

创新改变世界! 1907

PyTorch ModelNet点云数据集加载实战:从下载到Dataset类完整实现

在三维视觉与点云处理领域,数据集是算法研发的基石。ModelNet作为三维物体分类的基准数据集,其地位类似于图像领域的MNIST,是入门和评估模型性能的通用标准。理解其数据格式与加载原理,是进行点云分类、分割等任务的关键前置步骤。通过PyTorch的Dataset类,开发者可以构建高效的数据管道,将原始点云文件转换为神经网络可直接处理的张量格式,这一过程涉及数据采样、归一化、特征组装等核心操作,直接影响模型的训练效率和最终性能。本文聚焦于ModelNet10/40数据集,详细解析其目录结构,并提供一套稳健的

weixin_29032337的博客 280

递归:如何用三行代码找到“最终推荐人”?

推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多 App 都有这个功能。这个功能中,用户 A 推荐用户 B 来注册,用户 B 又推荐了用户 C 来注册。我们可以说,用户 C 的“最终推荐人”为用户 A,用户 B 的“最终推荐人”也为用户 A,而用户 A 没有“最终推荐人”。 一般来说,我们会通过数据库来记录这种推荐关系。在数据库表中,我们可以记录两行数据,其中 actor_id 表示用户 id,referrer_id 表示推荐人 id。 基于这个背景,我的问题是,给定一个用户 ID,如何查找这个用户的

liyf2的博客 412

Hermes Agent vs OpenClaw:2026 年开源 AI Agent 框架深度对比

两款 2026 年最受关注的开源 AI Agent 框架,一个主打「自进化」,一个聚焦「网关路由」——它们究竟有何不同?本文将从架构原理、核心机制、使用方式到适用场景,为你全面拆解。无论你是 AI 研究者、开发者,还是想用 AI 提升工作效率的个人用户,这篇文章都将帮助你做出最适合的选择

程序猿_三产 3746

漫谈递归——递归需要满足的两个条件

很多人对递归的理解不太深刻。一直就停留在“自己调用自己”的程度上。这其实这只是递归的表象(严格来说连表象都概括得不全面,因为除了“自己调用自己”的递归外,还有交互调用的递归)。而递归的思想远不止这么简单。递归,并不是简单的“自己调用自己”,也不是简单的“交互调用”。它是一种分析和解决问题的方法和思想。简单来说,递归的思想就是:把问题分解成为规模更小的、具有与原问题有着相同解法的问题。比如二分查找算法

1万+

人形机器人骨骼材料选型实战:从铝合金到碳纤维的5种方案对比

本文深入探讨人形机器人骨骼材料的选型策略,对比铝合金、镁合金、钛合金、碳纤维复合材料及3D打印材料等5种方案的性能优劣。通过建立强度-重量比、疲劳寿命等核心评价维度,结合具体应用场景,提供科学的材料决策方法论,助力开发者优化机器人结构设计,实现性能与成本的平衡。

weixin_29199873的博客 439

复现基于混频因子模型的GDP即时预测方法

基于混频因子模型的GDP即时预测方法复现 本文复现了混频因子模型(MIDAS)在GDP即时预测中的应用。该方法整合7个月度宏观经济变量(工业增加值、CPI、PMI等)与季度GDP数据,通过状态空间模型实现高频预测。技术实现包括:1)使用PCA提取潜在共同因子;2)构建状态空间模型处理混频数据;3)通过卡尔曼滤波进行参数估计。实证结果显示模型预测效果良好(测试集R²=0.82),其中工业增加值对因子1贡献最大(0.82),CPI对因子2贡献显著(0.78)。该方法为决策者提供了更及时的季度GDP估算。

huanghm88的专栏 601

经典递归问题--走迷宫--POJ 3984

经典递归问题--走迷宫--POJ 3984

知识源于积累 6622

防护装备穿戴检查:基于YOLOv8与UI界面的深度学习应用

通过结合YOLOv8模型与UI界面,本系统实现了防护装备穿戴检查的自动化。该系统能够快速识别工作人员是否正确佩戴了所需的防护装备,帮助提高安全管理水平。未来,随着技术的发展,防护装备穿戴检查系统将在更多领域得到应用,如工业现场、建筑工地等,实现更加精确和高效的实时监控。

YOLO 354

C语言练习百题之猴子吃桃子问题

在这个问题中,逆向递推法是最简单、直观的解法,适用于特定问题。数学求解法在理解数学推导的前提下也是一种清晰的解法。递归法则更加抽象和通用,但可能会受限于递归深度。对于这个具体问题,推荐使用逆向递推法或数学求解法,因为它们简单、直观且具有较好的性能。递归法则可能在天数较大时效率较低。

2302_79769289的博客 5040

【深度学习】什么是自回归模型?

自回归模型是一种重要的时间序列模型,通过利用过去的值来预测当前或未来的值。它在统计学、经济学、自然语言处理等领域有广泛的应用。自回归模型的简单性和可解释性使其成为许多应用的首选,但在更复杂的情况下,可能需要结合其他模型如移动平均模型(MA模型)或混合模型(如ARIMA)来更好地捕捉时间序列中的模式。扩散模型(Diffusion Model)和自回归模型(Autoregressive Model)是两种不同的生成模型,各自有独特的特点和应用场景。

q742971636的博客 1670

msf后渗透之获取登入password、远程控制、调用摄像头

在terminal输入load kili creds_all直接获取密码(不一定成功) 使用kiwi_cmd sekurlsa::logonpasswords获取密码

m0_61506558的博客 2964

C++二叉树递归求解:LeetCode刷题核心框架与高频题型解析

递归是计算机科学中解决自相似结构问题的核心思想,其本质是将复杂问题分解为相似的子问题,通过函数自我调用来实现。在数据结构领域,二叉树因其递归定义(每个节点最多有两个子节点,且子树也是二叉树)而成为递归思想的天然应用场景。递归在二叉树遍历、搜索和计算中展现出极高的技术价值,它能将复杂的迭代逻辑简化为清晰的分治策略,是算法面试和工程实践中处理树形数据的必备技能。在应用层面,递归广泛用于文件系统遍历、DOM树操作、决策树模型以及各类算法竞赛题目。本文聚焦于使用C++语言,通过递归三部曲思维模型,系统解析二叉树深度

weixin_34167819的博客 308

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

递推与递归:从数学定义到程序实现的系统知识体系

在算法学习中,递推与递归是基础而关键的思维模型。递推通过已知项推导后续项,体现数列生成法则;递归则通过函数自调用将大问题化为同构子问题。理解两者关联需要把握自然数归纳结构。数学归纳法为递归正确性提供逻辑支撑,递推式与程序实现相互映射。掌握从递推到递归、递归到递推的转换,能有效优化时间复杂度,规避栈溢出风险。在实际工程与竞赛中,动态规划、分治算法都依赖这些核心思想。本文系统梳理从数学定义到工程实践的关键链路,帮助读者建立完整的算法认知框架。

weixin_33812433的博客 569

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LeetCode 37. Sudoku Solver 题解:用 Go 实现 DFS 回溯求解数独

本篇以 [leetcode/0037.Sudoku-Solver/README.md](https://link.gitcode.com/i/ca0abfc97ae6d7cbe035fcc99e25b79d) 为骨架,结合 37. Sudoku Solver.go 的完整实现与 37. Sudoku Solver_test.go 的测试用例,深入讲解如何用 Go 通过 DFS 暴力回溯枚举解决数独

gitblog_00983的博客 1103

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

程序设计方法与实践-分治法

算法-分治法,归并排序,大整数乘法,快速排序,Strassen矩阵乘法

小陈为梦想而生 925

大数高次同余方程求解:从中国剩余定理到亨泽尔引理的工程实践

在密码学和数论中,处理超大整数(大数)运算是基础且核心的需求。其原理在于计算机原生数据类型无法直接表示和计算成百上千位的整数,必须依赖特殊的算法和库。这项技术的核心价值在于支撑了现代密码系统(如RSA)、安全协议和编码理论。具体到工程实践,求解高次同余方程 `f(x) ≡ 0 (mod n)` 是一个典型挑战,它直接关联到**大整数分解**和**模幂运算**等关键操作。通过结合中国剩余定理(CRT)将问题分解,并利用亨泽尔引理处理模素数幂的情形,可以构建出高效的求解器。本文即围绕这一技术路线,深入探讨了在已

weixin_34320159的博客 397

递归函数和预处理学习总结

递归学习心得: 递归即是该函数调用它本身自己,这种调用过程称为递归。递归可以相当于循环,所以想结束递归,就必须有终止递归的条件测试部分,否则就会出现无限递归(即无限循环)。 递归就是某过程以某种方式重复出现,很多“计算”也以某种方式重复出现。 例如: 数学归纳法中的递归:证明一个与自然数n有关的命题P(n),有如下步骤:(1)证明当n取第一个值n0时命题成立(n0对于一般数列取...

weixin_34161032的博客 261

<数据结构与算法分析>读书笔记--运行时间计算

有几种方法估计一个程序的运行时间。前面的表是凭经验得到的(可以参考:<数据结构与算法分析>读书笔记--要分析的问题) 如果认为两个程序花费大致相同的时间,要确定哪个程序更快的最好方法很可能将它们编码并运行。 一般地,存在几种算法思想,而我们总愿意尽早除去那些不好的算法思想,因此,通常需要分析算法。不仅如此,进行分析的能力常常提供对于设计有效算法的洞察能力。一般说来,分析还能准确地确...

weixin_30861797的博客 265

C++递归编程深度解析:从核心原理到高效实践

递归是计算机科学中一种重要的编程范式,其核心思想是将复杂问题分解为结构相同但规模更小的子问题。从原理上看,递归通过函数调用自身实现,其正确运行依赖于基线条件(Base Case)和递归条件(Recursive Case)的清晰定义,并涉及调用栈(Call Stack)的内存管理机制。在技术价值上,递归能极大简化对树、图等递归定义数据结构的操作,以及分治、回溯等算法的实现,使代码逻辑更贴近问题本质,提升开发效率。然而,递归也面临栈溢出(Stack Overflow)和重复计算等性能挑战。在实际应用场景中,递归

weixin_34327761的博客 362

回溯算法

1.  回溯算法的主要特征是什么? 答:把回溯算法看成一个不断地进行各种尝试直至问题解决的过程,这个过程似乎具有迭代性。 2.  用自己的语言来描述,如何用右手规则穿越迷宫。用左手法则是否也能达到同样的效果? 答:可以。 3.  用递归回溯法则解决迷宫问题的核心是什么? 答:出口就在其中的一条线上。如果选对了方向,那么将向解决方案更靠近一步。因此,沿着那条路走,问题就变得简单起来,

haiou327’blog 756

C++递归编程:从原理到实践,掌握核心算法与优化技巧

递归是计算机科学中一种基于函数自调用的核心编程思想,其本质是将复杂问题分解为结构相似的子问题,通过‘分而治之’的策略逐步求解。从数学定义映射到程序实现,递归通过调用栈管理执行状态,体现了自相似性和问题分解的思维模式。在技术价值上,递归能大幅简化树与图遍历、分治算法、回溯搜索等复杂逻辑的代码表达,提升开发效率与代码可读性。然而,递归也需警惕栈溢出和重复计算等性能陷阱,需结合记忆化、尾递归优化或迭代转换等工程实践进行规避。在C++开发中,递归广泛应用于数据结构遍历、算法设计及系统编程场景,是理解高级算法和提升代

weixin_30621711的博客 440
上一篇: 多文档话题跟踪展示技术的有趣实现
下一篇: 多维输入法启示
sharpdew
博客等级 码龄23年 76粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值