递归入门引例

【一】两个最基本的例子

//阶乘

function fac(a:longint):longint;
begin
    if a<2 then fac:=1
    else fac:=a*fac(a-1);
end;

//费波那契数列

function fab(a:longint):longint;
begin
    if a<=2 then fab:=1
    else fac:=fab(a-2)+fab(a-1);
end;

【二】求各位数字之和

输入一个正整数N(0 <= N <= 2147483647),求它的各位数字之和。

//一般方法

    readln(n);
    s:=0;
    while n>0 do
    begin
        s:=s+n mod 10;
        n:=n div 10;
    end;
    writeln(s);

//递归方法

function sum(a:longint):longint;
begin
    if a<10 then sum:=a
    else sum:=(a mod 10)+sum(a div 10);
end;

【三】超级楼梯
一个共有20个台阶的楼梯,从下面走到上面。一次只能迈一个台阶或两个台阶,并且不能后退,走完这个楼梯共有多少种方法。

分析:
1步台阶只有1种走法(1)
2步台阶2种(11、2)
3步台阶有3种(111、12、21)
4步台阶有5种(1111、112、121、211、22)
5步台阶有8种(11111、1112、1121、1211、122、2111、212、221)
6步台阶有13种(111111、11112、11121、11211、1122、12111,1212、1221、2111、2112、2121、2211、222)

function stair(n:longint):longint;
begin
    if n=1 then exit(1);
    if n=2 then exit(2);
    stair:=stair(n-1)+stair(n-2);
end;

begin
    writeln(stair(20));
end.

【四】小明在桌上排列20枚,求不允许出现连续两次正面的排列方法数。

时间: 2024-08-04 10:56:50

递归入门引例的相关文章

Problem C: 【递归入门】组合+判断素数

Description 已知 n 个整数b1,b2,…,bn 以及一个整数 k(k<n). 从 n 个整数中任选 k 个整数相加,可分别得到一系列的和. 例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34. 现在,要求你计算出和为素数共有多少种. 例如上例,只有一种的和为素数:3+7+19=29. Input 第一行两个整数:n , k (1<=n<=20,k&

对dijkstra的浅见(引例 poj 2457)

非负权值的单源最短路之 dijkstra Tanky Woo之dijkstra:  http://www.wutianqi.com/?p=1890 dijkstra-------我认为这个算法的核心思想是:最短路径长度递增.其实就是一个贪心算法. 怎么理解呢? 最短路的最优子结构:假如有一条最短路径已经存在了,那么其中任意两点的路径都将是最短的,否则假设是不成立了. 算法实现过程: 已当前点 pos 更新,dis[ i ]的值(即 点 i 到源点的距离) 找出dis[ i ] 最小的 i 点,作

C程序设计的抽象思维-递归入门

[斐波那契序列] 序列中的每一个新项都是它前两项的和. 0    1     1     2     3      5      8       13       21       34      55       89       144  ---- 数学表达式表示序列中的一个新项:   tN = tN-1 +  tN-2 像这种类型的表达式,序列中的每一个元素都是由先前的元素来确定,这种序列称为递归关系. 斐波那契序列的完整定义如下: tn =  n       n= 0 或者 n= 1 t

C#入门220例(第三章)

if else switch while for break continue radiobutton处理代码 if(rbt_true.Checked) { MessageBox.Show("yes"); } else { MessageBox.Show("no"); } 控制台应用程序的设定长以及宽,标题 以及利用for来显示时间(每次显示时间后停留一秒,运行完就清掉信息,再次下一次循环) class Program { static void Main(stri

Spring Boot入门样例-001-Java和Maven安装配置

Spring Boot入门样例-001-Java和Maven安装配置 本文说明Java和Maven在windows下的安装和配置 前言 本Spring Boot入门样例准备工作参考: Spring Boot入门样例-001-Java和Maven安装配置 Spring Boot入门样例-003-idea 安装配置和插件 Spring Boot入门样例-005-如何运行 1. 下载 下载地址:https://www.oracle.com/technetwork/java/javase/downloa

jbpm入门样例

1.      jBPM的简介 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储. 參考 http://www.jboss.com/products/jbpm 2.      jBPM和myeclipse的冲突 当eclipse安装了myeclipse和jBPM时候,可能有冲突,详细表如今jBPM的流程设计器不能在eclipse中使用. 3.      Hibernate连接mysql数据库的一般參数 以下的配置參数,依据

5972: 【递归入门】全排列

题目描述 排列与组合是常用的数学方法. 先给一个正整数 ( 1 < = n < = 10 ) 例如n=3,所有组合,并且按字典序输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 输入 输入一个整数n(  1<=n<=10) 输出 输出所有全排列 每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格) 样例输入 3 样例输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 这是对昨天学习<算法竞赛入门经典>的复

Direct3D 9 入门样例程序 圆锥体

介绍 Directx3D 9 什么是DirectX,非常好说了,Win32 C++ API.主要是多媒体编程方面的,长处体如今高性能了,如今我知道的版本号最高是D3D11,可是我是学习入门的,从D3D9開始,不算非常是落伍. Directx3D 元素 D3D元素非常多,这里说的元素是程序中用到的元素. 1〉D3D 编程的起点.能够理解成出所用的D3D SDK程序集. 2〉D3D present parameter .呈现參数,专业的參数是通过一顿检測配置成最好的.程序中的參数简单的用默认的显示參

递归入门 Java

对于强大的递归.要想做到灵活运用,是需要花时间进行练习并总结.往往递归学习的入门也是难度也比较大,常常会处于看得明,却写不出的"尴尬"情况. 递归的定义 将一个大的问题分解成比较小的.有着相同形式的问题. 递归是一种强有力的思想.在计算机科学的学习中,一个重要的必须学习的概念是递归.递归是一种编程策略,它把一个大的问题分解成具有相同形式的简单问题. 使用递归的必需条件 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式 存在一种简单情境,可以使递归在简单情境下退出 一般对递