递归的简单理解

简单实例

实例1、递归实现数字的倒序输出 

#include <iostream>
using namespace std;

int T(int n){	
    if(n<10) cout<<n;
    else{
    	cout<<n%10;
    	T(n/10);    	
	}
}
int main(){
	int n;
	cin>>n;
	T(n);
}

实例2、递归实现10进制转8进制

#include <iostream>
using namespace std;

int T(int n){

	if(n<8) return n;
	else return T(n/8)*10+n%8;
	
}

int main(){
	int n;
	cin>>n;
	cout<<T(n);

}

递归的简单理解

1、如何确认递归部在调用函数本身时的参数。递归分别由递归部和终止部组成,难点在于确定递归部。确认递归部的第一步是确认“子问题”,然后再通过子问题的分析确定递归函数的参数。在实例2里面递归部里面函数的第一个子问题是:“n%8得出余数a1”,下一个子问题是将n/8的值继续求余数a2,下下个子问题是将n/8的值继续求余数a3、、、,直到n<8的时候进入到终止部。故可以确定递归部的参数为n/8。

2、递归的执行顺序。在实例二中,按照常规的思维,一般我们会认为是先求解a1(子问题中n%8得出第一个余数),但是由于递归部的return的值是依赖下一个子问题的解,而下一个子问题是依赖下下个子问题的解,以此类推,直到进入到终止部的子问题,才能将所有问题解决。故一般递归的执行的顺序是从终止部开始的。

3、递归执行的顺序不一定会从终止部开始。在实例一“递归实现数字的倒序输出”,代码的执行顺序是“从递归部开始的”,因为“cout<<n%10;”不依赖于调用本身的函数。以输入数字“10086”为例,首先输出的是n%10为6,然后再进入下一个子问题输出下一个数字8,以此类推,倒序输出数字。故可以简单理解代码的执行顺序是从递归部开始的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值