算法:递归
2016-03-03 17:02
323 查看
刚开始学习算法,遇到递归,其中两个十分吸引本人的例子,觉得像是脑洞大开。
1. n!=nx(n-1)x(n-2)x......x2x1;
高中时候,n!一直都是手算,也没什么简便方法,然而递归这章让我眼前一亮
-(int) simple1(int n)
{
if(n==1)return;
return (n*simple1(n-1));
}
如此反复调用simple1(),直到n为1,此时return的值为nx(n-1)x(n-2)x......x2x1;
由此,算法不是死板的运用数学知识,而是将其与计算机语言结合起来,遇到问题随机应变灵活运用。
2.一串斐波那契Fibonacci数列,也是高中时候甚至初中也常出现的数列:1,1,2,3,5,8,13,21,34,55.......
一个数是前两个数的和。
可以将这数列表示为:S(n)=1 ,n=0
S(n)=1 ,n=1
S(n)=S(n-1)+S(n-2),n>=2
-(int) Fibonacci(int n)
{
if(n<=1)return 1;
return (Fibonacci(n-1)+Fibonacci(n-2));
}
这就是用算法表示Fibonacci数列,然而用表达式的话,S(n)=
1. n!=nx(n-1)x(n-2)x......x2x1;
高中时候,n!一直都是手算,也没什么简便方法,然而递归这章让我眼前一亮
-(int) simple1(int n)
{
if(n==1)return;
return (n*simple1(n-1));
}
如此反复调用simple1(),直到n为1,此时return的值为nx(n-1)x(n-2)x......x2x1;
由此,算法不是死板的运用数学知识,而是将其与计算机语言结合起来,遇到问题随机应变灵活运用。
2.一串斐波那契Fibonacci数列,也是高中时候甚至初中也常出现的数列:1,1,2,3,5,8,13,21,34,55.......
一个数是前两个数的和。
可以将这数列表示为:S(n)=1 ,n=0
S(n)=1 ,n=1
S(n)=S(n-1)+S(n-2),n>=2
-(int) Fibonacci(int n)
{
if(n<=1)return 1;
return (Fibonacci(n-1)+Fibonacci(n-2));
}
这就是用算法表示Fibonacci数列,然而用表达式的话,S(n)=
(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
同样也是十分麻烦,如果直接找规律,按照高中的数学知识,也得花很长时间。
也可以看出算法是将复杂的事情,做的更加简单。
之后的还有,棋盘覆盖等,都用到递归的思想。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 有关数据库SQL递归查询在不同数据库中的实现方法
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#中的递归APS和CPS模式详解
- C#冒泡法排序算法实例分析
- WinForm实现按名称递归查找控件的方法
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#实现的算24点游戏算法实例分析
- C#中的尾递归与Continuation详解
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法