现在的位置: 首页 > 竞赛 > 正文

程序设计思想——递推

2012年12月20日 竞赛 ⁄ 共 417字 ⁄ 字号 暂无评论

递推是计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。

计算1+2+3+…+100的值

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main(int argc, char *argv[])
{
    int i, sum = 0;
    for(i=1; i<=100; i=i+1) {
        sum = sum + i;
    }
    printf("%d\n", sum);
    return 0;
}

编写程序,输出Fibonacci数列的前30项(每行输出5项)。

斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(int argc, char *argv[])
{
    int i=0;
    int f1=0, f2=1, f3;
    printf("%10d%10d",f1,f2);
    for(i=3; i<=30; i++) {
        f3=f1+f2;
        printf("%10d",f3);
        f1=f2;
        f2=f3;
        if(i%5==0)	printf("\n");
    }
    return 0;
}

如果没有计算器,我们如何求2的平方根?

可以先猜测一个数,比如1.5,然后用2除以这个数字。如果我们猜对了,则除法的结果必然与我们猜测的数字相同。我们猜测的越准确,除法的结果与猜测的数字就越接近。

根据这个原理,只要我们每次取猜测数和试除反馈数的中间值作为新的猜测数,肯定更接近答案!这种计算方法叫做“迭代法”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
    double x, a, b;
    scanf("%lf", &x);
    a = 0;  b = x;
    while(fabs(a-b)>1E-15)     {
        a = (a+b)/2;
        b = x/a;
    }
    printf("%.6lf\n", a);
    return 0;
}
1
 
1
 

抱歉!评论已关闭.