算法:递归

来源:互联网 发布:arp通过ip获取mac 编辑:程序博客网 时间:2024/06/05 14:58

刚开始学习算法,遇到递归,其中两个十分吸引本人的例子,觉得像是脑洞大开。

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}
同样也是十分麻烦,如果直接找规律,按照高中的数学知识,也得花很长时间。
也可以看出算法是将复杂的事情,做的更加简单。
之后的还有,棋盘覆盖等,都用到递归的思想。

1 0
原创粉丝点击