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