c++中及其重要的递归(超详细)

1.了解递归的作用:

递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。

2.能解决的问题:

数据的定义是按递归定义的。如Fibonacci函数。
问题解法按递归算法实现。如Hanoi问题。
数据的结构形式是按递归定义的。如二叉树、广义表等

3.结构:
一递一归;
必须有结束条件

4.实际代码:(最为基础)

(函数类型) 函数名
{
	if(结束条件)
	{
		return ...(按你的题描述来写);
	}
	else
	 {
	 	return ...(调用自己);
	 }
}

5.实战演练

1.

汉诺塔问题
时间限制:1秒 内存限制:128M
题目描述
设有n个大小不等的中空圆盘,按照从小到大的顺序叠套在立柱A上,另有两根立柱B和C。现在要求把全部圆盘从A柱(称为源柱)移到C柱(称为目标柱),移动过程中可借助B柱(称为中间柱)。移动时有如下的要求:

1) 一次只许移动一个盘。

2) 任何时候、任何柱子上不允许把大盘放在小盘上边

3) 可使用任意一根立柱暂存圆盘。

问:如何用最少步数实现n个盘子的移动?请打印出具体的移动方案

输入描述
一行一个正整数n,1<=n<=18

输出描述
输出若干行,第i行表示第i步的移动方案

样例
输入

3

输出

A->C
A->B
C->B
A->C
B->A
B->C
A->C

这道题较为经典
AC:

#include <iostream>
using namespace std;
void f(char A,char B,char C,int n){
	if (n!=0){
		f(A,C,B,n-1);
		cout<<A<<"->"<<C<<endl;
		f(B,A,C,n-1);
	}
}
int main(){
	int n;
	cin>>n;
	f('A','B','C',n);
	return 0;
}

斐波那契数列
时间限制:1秒 内存限制:128M
题目描述
输入n,1<=n<=1000,输出斐波那契数列第n项模9997的值

输入描述
输入n

输出描述
输出斐波那契数列第n项模9997的值

样例
输入

10

输出

55
这道题也用递归:
AC:
#include<bits/stdc++.h>
using namespace std;
int a[1005]={0};
int fun(int n){
    if(a[n]!=0){
        return a[n];
    }
	if(n==1||n==2){
		return a[n]=1;
	}
	else{
		return a[n]=fun(n-1)%9997+fun(n-2)%9997;
	}
}
int main(){
	int n;
	cin>>n;
	cout<<fun(n)%9997;
	return 0;
}
都看到这了,难道不点个赞或关注一下?
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值