xperia主题中心:15编写如下函数原型的递归与非递归两种函数equ
bool equ(int a[], int b[], int n);
提示:递归函数中可按如下方式来分解并处理问题,先判断最后一个元素是否相同,不同则返false;相同则看n是否等于1,是则返回true,否则进行递归调用(传去实参a、b与 n-1,去判断前n-1个元素的相等性),并返回递归调用的结果(与前n-1个元素的是否相等性相同)。
递归:
bool equ(int a[],int b[],int n)
{
if(n==1)
{
if(a[1]==b[1])
return ture;
else return false;
}
else
{
if(a[n]!=b[n])
return false;
else
{
n=n-1;
equ(a,b,n);
}
}
}
非递归:
bool(int a[],int b[], int n)
{
int i;
for(i=0;i<n;i++)
if(a[i]!=b[i])
return false;
return ture;
}
如下所示:
bool equ(int a[], int b[], int n)
{
if(a[n-1] != b[n-1])
{
return false;
}
if(n == 1)
{
return true;
}
return equ(a, b, n-1);
}
注意,n 是指比较的元素的个数,不是下标。
我也来试试呵呵,上面2位都已经搞定了,我来看看使用C语言最简是什么样子:P,省的大家都说C实现代码很长很郁闷~,真正写代码可别学我这个样子,毕竟代码是给人看的呵呵:
首先递归:
bool equ(int a[], int b[], int n)
{
(1>=n)&&(n=1,a[n-1]==b[n-1])?return true:a[n-1]== b[n-1]?return equ(a,b,n-1):return false;
}
再来看非递归:
bool(int a[],int b[], int n)
{
while(1)0>=n&&a[--n]!=b[--n]?return false:0>=n?return true;
}
-----------------
注:递归里面的1>=n和非递归里面的0>=n是对n的值域的判断,防止别人用负数n对你搞小破坏嘻嘻~~~所以从这上点来看,楼上2位的代码可就危险喽~~
鬼火狼烟写的好精简阿