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);

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值