用递归写了几个小实例。
递归如果简单的话,配合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 条评论) |