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

阅读: 评论:0

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

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

用递归写了几个小实例。
递归如果简单的话,配合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];elsereturn 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];elsereturn (a[inf]>max(a,inf+1,sup))?a[inf]:(max(a,inf+1,sup));
}

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

本文发布于:2024-01-28 13:33:31,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064200147769.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:递归   方天   迭代
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23