递归:

迭代为人,递归为神。

老和尚讲故事

从前有座山,山上有座庙,庙里有个老和尚,老和尚他说:“从前有座山,山上有座庙,庙里有个老和尚,老和尚他说:‘从前有座山,山上有座庙,庙里有个老和尚,老和尚他说:’ ”...

void的函数调用自身

电影院问座位(递和归的过程)

假设黑暗中一群懒人在电影院里,某人想知道自己坐在哪一排,于是问前一排的人「你坐在哪一排?」,前面的人 (代号 A) 回答后,他就知道自己在哪一排了——只要把 A 的答案加一就行。不料 A 比他还懒,也不想数,也问他前面的人 B「你坐在哪一排?」,这样 A 可以用和他一模一样的步骤知道自己所在的排。然后 B 也如法炮制。直到他们这一串人问到了最前面的一排,第一排的人告诉问问题的人「我在第一排」。最后大家就都知道自己在哪一排了。

返回值

用递归方法来解决问题必须符合两个条件:

可以把一个问题转化成一个新的问题,而新问题的解法和原问题的解法完全相同,只是处理对象的规模不同

必须要有一个明确的递归终止条件

例,求n!

int f(int n){if(n==1) return 1;if(n>1) return n*f(n-1);
}
int main(){int n;cin>>n;cout<<f(n);
}

1242楼梯(记忆处理)

Description

楼梯有n(n<=40)阶台阶。
上楼可以一步上1阶,也可以一步上2阶。
编一程序计算上n阶台阶共有多少种不同的走法?

Input

输入n

Output

输出走法总数

Sample Input

3

Sample Output

3

long long f(int n){if(n==1)return 1;if(n==2)return 2;return f(n-1)+f(n-2);
}
int main(){int n;cin>>n;cout<<f(n); return 0;
}

中间有很多重复调用的过程,可以将已经调用过的记录下来直接使用,避免重复调用。

long long a[45]={0,1,2};
long long f(int n){if(a[n])return a[n];return a[n]=f(n-1)+f(n-2);
}
int main(){int n;cin>>n;cout<<f(n); return 0;
}

1244错排问题的推导

Description

某人写了n封信和n个信封,如果所有的信都装错了信封。求所有的信都装错信封共有多少种不同情况。

Input

输入n(n <=20)

Output

输出情况总数

Sample Input

2

Sample Output

1

如:1,2,3,4,5等n本书

当1和后面的n-1本书中的某本书交换位置时,剩下的n-2本书就是n-2的错排。因此排列方式为 (n-1)*f(n-2)(乘法原理)

如果交换的这本书不放在1的位置,那么就是n-1本书的错排。排列方式为 (n-1)*f(n-1)

总的排列方式为:(n-1)*f(n-2)+ (n-1)*f(n-1) (加法原理)

long long a[45];
long long f(int n){  if(n==1)return 0;if(n==2) return a[2]=1;if(a[n]) return a[n];return a[n]=(n-1)*(f(n-1)+f(n-2));
}
int main(){int n;cin>>n;cout<<f(n); return 0;
}

1241汉诺塔(要求写出调用过程)

Description

汉诺塔问题:设有三个塔座,依次命名为A,B,C。有n个直径不同的圆盘,由小到大依次编号为1,2,…,n。
开始时,它们全部按递减的次序插在塔座A上。现要求按下列规则把n个圆盘按次序插放在C塔座上。
(1)每次只能移动一个圆盘;
(2)圆盘可以从任一个塔座上移到另一个塔座上;
(3)任何时刻都不能把一个较大的圆盘压在较小的圆盘上。

Input

输入n(n<=20)

Output

输出移动过程

Sample Input

3

Sample Output

A->C

A->B

C->B

A->C

B->A

B->C

A->C

void hanoi(int n,char a,char b,char c){if(n==1){cout<<a<<"->"<<c<<endl;return;}if(n>1){hanoi(n-1,a,c,b);cout<<a<<"->"<<c<<endl;hanoi(n-1,b,a,c);}
}
int main(){int n;cin>>n;hanoi(n,'A','B','C'); return 0;
}

介绍重庆市第十届大学生程序设计比赛情况

做练习:A.狂小P猜密码

狂小P想解锁快乐C的iPhone,但是他只知道解锁密码由四位0~9的阿拉伯数字组成。

现在给你一个长度为10的数组d[0...9],保证对于,有di = 0表示数字i没有在解锁密码中出现,di = 1表示数字i在解锁密码中出现至少一次。

狂小P现在想知道有多少种解锁密码满足上述条件。

Input

输入仅一行,包含10个整数,表示d[0...9]。

Output

输出仅一个整数,表示答案。

Examples

input

1 1 1 1 0 0 0 0 0 0
output

24

input

0 0 0 0 0 0 0 0 0 0

output

0

不难的题目,但比赛中有时不能正确理解题意导致出错。

int a,s;
int main(){for(int i=0;i<10;i++){cin>>a;if(a==1)s++;}if(s==0||s>4)cout<<0;if(s==1)cout<<1;if(s==2)cout<<14;if(s==3)cout<<36;if(s==4)cout<<24;return 0;
}

1227讲解(递归deng)相关推荐

  1. C语言入门——递归(思想简要讲解+简单递归练习)

    C语言入门--递归(简要讲解+递归练习) 递归定义: 程序调用自身的编程技巧称为递归( recursion). 递归从字面上我们可以理解为: 递去+归来 如下图 使用递归的目的: 简要:简化代码量,方 ...

  2. 干货:一文彻底弄懂递归如何解题

    前言 递归是算法中一种非常重要的思想,应用也很广,小到阶乘,再在工作中用到的比如统计文件夹大小,大到 Google 的 PageRank 算法都能看到,也是面试官很喜欢的考点 最近看了不少递归的文章, ...

  3. 排列和组合简单的递归思路以及C++实现

    本文将讲解如何通过递归的方法实现全排列和组合,会详细讲解递归的思路,最后还会给出c++实现的源码.先前学习数据结构和算法的时候一直没有弄明白它们的递归思路,今日遇到,细一思考,发现并没有之前那么难,于 ...

  4. 【 C 】深入了解递归

    今天看<C和指针>这本书,看到递归这一块,书中讲解递归时候似乎批判了一些书中讲解递归时使用了一些误导的例子,而这些例子不就是我当年接触递归时候看过的例子吗?当时得意洋洋地以为自己掌握了递归 ...

  5. 递归和迭代_迭代与递归

    很多编程小白都会遇到'迭代'和'递归'的问题(包括我自己),大部分同学还是不知道迭代与递归的区别.下面我就尝试用最通俗易懂的模式讲解递归与迭代的区别. 1.迭代: 迭代其实很简单,我们在编程中经常用到 ...

  6. mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...

    点击查看请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!具体信息 答:include "stdio.h" int fac(int k) { if(k==1) ...

  7. 数据结构与算法--再谈递归与循环(斐波那契数列)

    再谈递归与循环 在某些算法中,可能需要重复计算相同的问题,通常我们可以选择用递归或者循环两种方法.递归是一个函数内部的调用这个函数自身.循环则是通过设置计算的初始值以及终止条件,在一个范围内重复运算. ...

  8. 递归函数python有什么特点_Python中的递归

    在前面的讲解中,函数的调用通常发生在彼此不同的函数之间.其实,函数还有一种特殊的调用方式,那就是自己调用自己,这种方式称为函数递归调用. 递归,在程序设计中也是一个常用的技巧,甚至是一种思维方式,非常 ...

  9. ++递归 字符串全排列_超全递归技巧整理,这次一起拿下递归

    0. 前言 大家好,我是多选参数的程序锅,一个正在 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.本篇将主要介绍递归相关的内容,下面是本篇的内容提纲. 1. 递归基础 ★ 争哥:从我 ...

最新文章

  1. 传说中的贝叶斯统计到底有什么来头?
  2. 获取 GPG 密钥失败:[Errno 14] 2011-05-26 14:43
  3. Codeforces 494Div3(ABCDJava编写)
  4. 并发加对象锁_通用并发对象池
  5. 成功试验基于C#/.NET的Android开发
  6. Python外(1)--try-expect
  7. oracle和db2之间的基本差别
  8. Oracle事务隔离级别
  9. 判断数组中的元素是否连续
  10. MAC下maven本地仓库配置
  11. android表情转码,UCS-4 android/ios微信emoji表情转码
  12. android手机测试”
  13. 5W1H、5W2H 分析法
  14. jenkins下载插件慢解决方式
  15. WPF界面美化(整体作用到控件),一步步教你使用FirstFloor.ModernUI
  16. 威廉玛丽学院计算机专业好吗,威廉玛丽学院计算机
  17. 计算机台式硬件排名,台式机主板什么牌子好?台式电脑主板品牌排行榜前十名(2)...
  18. [资源帖]SIGGRAPH2016 下载地址
  19. chrome、Firefox、IE浏览器和驱动下载地址
  20. chap4Web服务器-入门学习笔记

热门文章

  1. 头条终面:写个消息中间件
  2. 作为一个程序员,CPU的这些硬核知识你必须会!
  3. 【图像去模糊】 deconvolution总结
  4. 更改eclipse中jsp默认编码格式为UTF-8
  5. SAP 直接修改程序的方法
  6. Hibernate学习3—映射对象标识符(OID)
  7. Android程序打开和关闭输入法
  8. framebuffer[转之]
  9. linux下如何获取cpu的利用率
  10. mysql y_关于MySQL中Y和~问题