当前位置: 首页 > news >正文

为博彩做网站日入两万河南省干部任免最新公示

为博彩做网站日入两万,河南省干部任免最新公示,wordpress 修改网址,成品网页网站目录 前言 十、递归程序设计 10.1 计算n!——递归程序设计 10.2 程序设计实例 10.2.1 汉诺塔 10.2.2 齿轮 10.2.3 组合 10.3 计算算术表达式的值——间接递归 10.4 递归程序执行过程 前言 递归程序设计是一种编程技术,其中一个函数通过调用自身…

目录

前言

十、递归程序设计

10.1 计算n!——递归程序设计

10.2 程序设计实例

10.2.1 汉诺塔

10.2.2 齿轮

10.2.3 组合

10.3 计算算术表达式的值——间接递归

10.4 递归程序执行过程


前言

        递归程序设计是一种编程技术,其中一个函数通过调用自身来解决问题。递归的思想是将大问题划分为更小的子问题,并通过解决子问题来解决原始问题。递归可以在问题的规模较小的情况下,通过不断地调用自身来解决更大规模的问题。递归函数通常包含两个部分:基本情况和递归情况。

  • 基本情况是指问题的规模已经足够小,不再需要进一步的递归调用,可以直接返回结果。这是递归的结束条件。
  • 递归情况是指问题的规模仍然较大,需要通过调用自身来解决更小规模的子问题。递归函数在解决子问题时,会不断地调用自身,直到达到基本情况。

   

十、递归程序设计

10.1 计算n!——递归程序设计

要计算n的阶乘(n!),可以使用递归程序设计。递归计算n的阶乘的思路如下:

  • 基本情况:当n为0或1时,阶乘的结果为1。
  • 递归情况:当n大于1时,n的阶乘可以表示为n乘以(n-1)的阶乘。
#include <stdio.h>int factorial(int n) {if (n == 0) {return 1;} else {return n * factorial(n - 1);}
}int main() {int n = 5;int result = factorial(n);printf("%d! = %d\n", n, result);return 0;
}

        函数factorial是递归函数。它将问题划分为计算n乘以(n-1)的阶乘的子问题,并通过递归调用自身来解决子问题,直到达到基本情况。调用这个函数来计算任意正整数n的阶乘,例如factorial(5)将返回120。

10.2 程序设计实例

10.2.1 汉诺塔

        汉诺塔是一个经典的递归问题。它涉及将一堆盘子从一个柱子移动到另一个柱子,每次只能移动一个盘子,并且大盘子不能放在小盘子上面。下面是一个用C语言实现汉诺塔问题的递归函数:

#include <stdio.h>void hanoi(int n, char source, char destination, char auxiliary) {if (n == 1) {printf("Move disk 1 from %c to %c\n", source, destination);return;}hanoi(n - 1, source, auxiliary, destination);printf("Move disk %d from %c to %c\n", n, source, destination);hanoi(n - 1, auxiliary, destination, source);
}int main() {int n = 3;hanoi(n, 'A', 'C', 'B');return 0;
}

        函数hanoi用来解决汉诺塔问题。它接受四个参数:n表示盘子的数量,source表示源柱子,destination表示目标柱子,auxiliary表示辅助柱子。当n为1时,直接将盘子从源柱子移动到目标柱子。否则,它将递归地将n-1个盘子从源柱子移动到辅助柱子,然后将第n个盘子从源柱子移动到目标柱子,最后将n-1个盘子从辅助柱子移动到目标柱子。

10.2.2 齿轮

10.2.3 组合

        组合是数学中的一个概念,指的是从一个给定的集合中选取一部分元素的方式。想要实现一个计算组合的程序,可以使用递归或迭代的方法:

#include <stdio.h>int combination(int n, int k) {if (k == 0 || k == n) {return 1;} else {return combination(n - 1, k - 1) + combination(n - 1, k);}
}int main() {int n = 5;int k = 3;int result = combination(n, k);printf("C(%d, %d) = %d\n", n, k, result);return 0;
}

        函数combination用来计算组合。它接受两个参数:n和k,分别表示集合的大小和选取的元素个数。当k等于0或k等于n时,返回1,表示只有一种选取方式。否则,它将递归地计算从n-1个元素中选取k-1个元素的组合数,以及从n-1个元素中选取k个元素的组合数,并将它们相加作为结果。

10.3 计算算术表达式的值——间接递归

        要计算算术表达式的值,可以使用间接递归来实现,间接递归是指多个函数之间相互调用形成的递归关系:

#include <stdio.h>int expression_value(char* expression);int factor_value(char* expression) {if (expression[0] == '(') {return expression_value(expression + 1);} else {return expression[0] - '0';}
}int term_value(char* expression) {int value = factor_value(expression);if (expression[1] == '*') {value *= term_value(expression + 2);}return value;
}int expression_value(char* expression) {int value = term_value(expression);if (expression[1] == '+') {value += expression_value(expression + 2);}return value;
}int main() {char expression[] = "((2*3)+4)";int result = expression_value(expression);printf("Expression value: %d\n", result);return 0;
}
  • 我们定义了三个函数:expression_valueterm_valuefactor_value,它们之间相互调用形成了间接递归。
    • factor_value函数用来计算因子的值,如果因子是一个括号内的表达式,则调用expression_value函数来计算括号内表达式的值;否则,将字符转换为对应的数字。
    • term_value函数用来计算项的值,首先计算第一个因子的值,然后判断后面是否有乘号,并乘以后面的因子的值。
    • expression_value函数用来计算表达式的值,首先计算第一个项的值,然后判断后面是否有加号,并加上后面的项的值。
  • main函数中,定义一个算术表达式,并调用expression_value函数来计算表达式的值,并打印结果。

10.4 递归程序执行过程

        递归程序的执行过程可以通过堆栈(stack)来理解。当一个函数被调用时,它的局部变量和函数调用的返回地址被压入堆栈。如果函数内部包含递归调用,那么每次递归调用都会将新的局部变量和返回地址压入堆栈。递归的结束条件是达到递归终止条件,此时递归开始回溯,从最后一个递归调用返回到上一个递归调用,然后再返回到更上一层递归调用,直到回到最初的函数调用。

        在递归程序执行过程中,每个递归调用都会占用一些内存空间,并且会在堆栈上创建一个新的帧(frame),包含局部变量和返回地址。当递归调用过多时,可能会导致堆栈溢出(stack overflow)的问题,因为堆栈的大小是有限的。

  • 注意
    • 递归终止条件的设置,否则可能会导致无限递归,使程序陷入死循环。
    • 递归程序还需要注意递归的效率,因为递归调用会带来函数调用的额外开销。

http://www.hkea.cn/news/160217/

相关文章:

  • 网站开发专业前景关键词挖掘排名
  • 网站开发属于什么职位类别seo查询站长工具
  • wordpress postmetaseoul national university
  • 商务网站的主要存在形式杭州百度快照优化公司
  • 个人备案网站做购物网站可以不班级优化大师免费下载电脑版
  • 贸易网站建设互联网广告代理加盟
  • 深圳网站建设网络公司河北关键词排名推广
  • 在工商网上怎么注册公司seo优化博客
  • 免费的小程序怎么赚钱历下区百度seo
  • 河北石家庄最新疫情最新消息优化防疫政策
  • 一站式做网站哪家强新闻小学生摘抄
  • 江西南昌网站建设公司哪家好谷歌google 官网下载
  • 公司网站用什么开发百度指数怎么用
  • 建站主机 wordpress济南网站万词优化
  • 哈尔滨app开发seo自学网官网
  • 网站答辩ppt怎么做全网关键词云在哪里看
  • 网站建设 视频seo关键词词库
  • 网站应用软件设计成都网站建设技术外包
  • 用哪个软件做网站网址查询域名解析
  • 网站安全优化域名停靠浏览器
  • 我做中医培训去哪个网站找学员谷歌排名算法
  • 如何将网站让百度收录网店培训班
  • wordpress旧版页面编辑界面百度seo推广计划类型包括
  • 网站建设茶店网网站换友链平台
  • 珠海建设工程信息网站网络营销百度百科
  • 帮别人做网站推广犯法吗关键词排名网站
  • 建设通网站是政府的么高端网站定制设计
  • 玉溪做网站的公司夸克搜索网页版
  • wordpress导航主题haowseo挂机赚钱
  • 广州做家教的网站深圳网络推广招聘