关于递归算法的一些理解

本文介绍了递归算法的概念、特点,并通过斐波那契数列、Pell数列及汉诺塔问题举例说明,强调了递归的使用须考虑规律、出口条件以及效率问题。同时分享了学习递归的心得体会。
摘要由CSDN通过智能技术生成

一.递归概念

递归算法(英语: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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值