23、迭代和递归

1.递归和迭代术语的定义是什么?一个函数可以同时采用这两种方法吗?

  答: 递归的定义:将一个大问题分解成比较小的、有着相同形式的问题。

        迭代跟递归策略是相反的。它使用循环(一般情况下,使用for和while语句)的实现被称为迭代的。他们能够通过截然不同的方式来解决一个问题。然而,这些策略并不互相排斥。

2.递归和逐步求精法的根本区别是什么?

 答:“相同形式”是这个定义中的关键,否则就成了—逐步求精策略,两种策略都涉及到分解。递归的特殊之处就在于子问题有着和初始问题相同的形式。

3、比如,迭代的一个经典例子是斐波那契数列,这个数列是这样定义的:

       f(n-1) + f(n-2)    (n>2)
f(n)={
       1                 (1<=n<=2)

#include<stdio.h>

intmain(void)

{

    int n;

    int f[100] = {0,1};

    scanf("%d", &n);         // 输入要计算的n

    for(int a=2; a<=n; ++a)  // a控制循环次数

    {

        f[a] = f[a-1] + f[a-2];

    }

    printf("%d\n", f[n]);    // f[n]就是结果

    return 0;

}

而递归最典型的例子要是求阶乘了。我们在这里举另一个例子,反转字母:

#include<stdio.h>

void f()

{

int c = getchar();     

if(c!='\n')    f();      

 putchar(c);       

}

intmain(void)

{

f();  

return 0;

}

当然了,斐波那契数列也可以写成如下递归:

int f(n)

{

    if(n<=2)return 1;

    return fib(n-1) + fib(n-2);

}

发布了278 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hopegrace/article/details/104569671