一.递归概念
递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。
这几周做了一些递归的练习,对递归有了一些理解和体会,因此写在这里做一下总结,如果哪里有不对之处,烦请指出。
二.递归特点
(1)递归的使用就是不断的调用自身
(2)使用递归时,必须有一个条件作为递归出口(下面会有详例)
(3)递归会消耗大量的时间和内存,因此oj上的某些有时限的题目,不能通过。而非递归函数虽然效率高,但相对比较难编程。
三.举例
先来一个相对简单的例子,斐波那契数列函数部分代码
int Fibonacci(int x)
{
if(x==1 || x==2) //这里就是递归特点第二条,使用递归时,必须有一个条件作为递归出口,而此时x==1 || x==2就是条件
return 1;
else
return Fibonacci(x-1)+Fibonacci(x-2); //这里就是递归特点第一条,需要不断调用自身
}
接下来再举一个例子,说一下递归特点的第三条
Pell数列
描述
Pell数列a1, a2, a3, …的定义是这样的,a1 = 1, a2 = 2, … , an = 2 * an − 1 + an - 2 (n > 2)。
给出一个正整数k,要求Pell数列的第k项模上32767是多少。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 1000000)。
输出
n行,每行输出对应一个输入。输出应是一个非负整数。**
//Pell数列(超时)
#include<iostream>
using namespace std;
int workout(