递归编程盘点
来源:互联网 发布:湖北侦破网络传销 编辑:程序博客网 时间:2024/06/14 00:41
递归编程:
一般来说,递归需要有边界条件。当条件不满足时,递归前进;当条件满足时,递归返回。
注意:<1>.递归就是在过程和函数里调用自身;
<2>.明确的递归约束条件,即递归出口。
经典案例(封装方法):1.小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个.以后每天早上吃前一天剩下的一半另一个.
到第10天早上猴子想再吃时发现,只剩下一个桃子了.问第一天猴子共摘多少个桃子?
public static int PeachOfMonkey(int day) {if (day>10) {
Console.WriteLine("天数不能大于10");
return 0;
}
if (day ==10) {//当天数10,返回1
return 1;
}
return (PeachOfMonkey(day + 1) + 1) * 2;//天数越靠近结束条件,执行递归次数越少
2.斐波那契数列(兔子数列)
public static int Fibonacci(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 1;
}
if (n<=0) {
return -1;
}
return Fibonacci(n-1)+ Fibonacci(n-2);
}
3.汉诺塔问题
public static void hannoi(int n, string from, string buffer, string to) {
if (n == 1) {
Console.WriteLine("Move disk " + n + " from " + from + " to " + to);
}
else {
hannoi(n - 1, from, to, buffer);
Console.WriteLine("Move disk " + n + " from " + from + " to " + to);
hannoi(n - 1, buffer, from, to);
}
}
4.角谷定理
角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。
public static int KakutaniTheorem(int num) {
if (num == 1) {//二进制数,最左边数字,必须为0,。故递归方法的结束条件num==1
return 0;
}
if (num % 2 == 0) {
Console.Write(num / 2 + " ");
return KakutaniTheorem(num / 2) + 1;//KakutaniTheorem(num / 2) 当前数需要运算的次数,每调用一次,次数加一
}
else {
Console.Write(num * 3 + 1 + " ");
return KakutaniTheorem(num * 3 + 1) + 1;//KakutaniTheorem(num / 2) 当前数需要运算的次数,每调用一次,次数加一
}
- 递归编程盘点
- 2008编程语言盘点
- 2008编程语言盘点
- 盘点PHP编程常见失误
- 盘点PHP编程常见失误
- 盘点
- 盘点
- 编程语言排行榜2008年末盘点
- 蔡学镛:2008编程语言盘点(转)
- 2015年编程语言应用趋势盘点
- 2015年编程语言“钱途”盘点
- 编程思想之递归
- 【编程】递归函数
- Python汉诺塔递归编程
- 递归编程(二)
- 盘点:12种从头开始免费学习编程的方法
- 盘点:7种从头开始免费学习编程的方法
- 盘点百度开放云编程马拉松八大亮点
- 如何应用font Awesome矢量字体图标介绍
- A计划
- MFC中实现组合键调用窗口功能
- How many integers can you find
- 设计模式六大原则之依赖倒置原则
- 递归编程盘点
- libfdk_aac is incompatible with the gpl and --enable-nonfree is not specified.
- 学习方法总结
- shell 脚本编程之条件语句
- 不敢死队问题
- 移动端1像素实现
- xadmin theme自定义主题
- [Navicat] 常用快捷键及注意事项
- CSS基础