迭代乃人为,递归方天作:玩玩递归

用递归写了几个小实例。
递归如果简单的话,配合return和?:只有一句话,看着挺震撼的。

递归求正整数幂

int powInteger(int base,int power)
{
	return power==0?1:(base*powInteger(base,power-1));
}

原理也很简单,如果幂为0就返回1,不为0时利用x^n=x·x ^n-1
当然0的0次幂是错的

递归求整数长

int lenInteger(int n)
{
	return (n/10==0)?1:1+lenInteger(n/10);
	//The condition cannot be written as n==0 cuz lenInteger(0) should be 1 
}

原理:个位数就返回1,否则返回1+去除最低位的长度
条件不能写成n==0就返回1或者0,不然个位数会出错。

递归求逆数

已知问题:数字中如果有0会被吞掉,原因是0会影响strlen算位数

int reverse(int n)
{
	if(lenInteger(n)==1) return n;
	else 
		{
			int standard=powInteger(10,lenInteger(n)-1);
			return n/standard+10*reverse(n%standard);
		}
 } 

standard是用来取最高位数的,是10的长度-1次方。
到个位就返回本身,不然就取下高位和原来的组装,每次乘以10保证了位数正确。

递归求和

int sum(int *a,int inf,int sup)
{
	if(inf==sup)
		return a[inf];
	else
		return a[inf]+sum(a,inf+1,sup);
}

这个挺好理解的。
inf是下标的下确界,sup是下标的上确界。

递归找最大

int max(int *a,int inf,int sup)
{	
	if(inf==sup) return a[inf];
	if(inf=sup-1)
		return a[inf]>a[sup]?a[inf]:a[sup];
	else
		return (a[inf]>max(a,inf+1,sup))?a[inf]:(max(a,inf+1,sup));
}

inf是下标的下确界,sup是下标的上确界。
如果区间只有1个数,返回自己。
如果区间只有两个数,比大小后返回较大的那个。
不然返回端点值和去掉端点值后的数组中的最大值的较大值。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值