发现#01 --n与递归的神奇反应

我们常常习惯于把一些写法不同的代码看成等效的。比如 x+=1x=x+1,n++n=n+1,同时我们也会把一些不等效的特例牢记于心,比如n++--n在赋值运算中有差异……
今天,我将用一个具体实例说明——
只要长相不一,那就是不同的。人如此,代码语句也如此。
看到上面这句话,估计有小伙伴会发现其逻辑存在瑕疵。怎么能用一个实例就支撑一个正论呢?的确不能,但对于一个coder,把这句话作为信条准不会吃亏,尤其是在做重大项目时,语法上的保守是很有必要的!

请判断以下两种求和写法是否等效

1
2
3
4
5
6
7
//写法一
int sum(int a[],int n){ //n>=1
int i,sum=0;
for(i=0;i<n;i++)
sum+=a[i];
return sum;
}
1
2
3
4
5
6
//写法二
int sum(int a[],int n){ //n>=1
if(n==1)
return a[0];
return a[n-1]+sum(a,--n);
}

提示:判断写法二与该写法是否等效

1
2
3
4
5
6
//写法三
int sum(int a[],int n){ //n>=1
if(n==1)
return a[0];
return a[n-1]+sum(a,n-1);
}

相信有小伙伴已经看出了其中的奥秘,为了让大家体验一下自己发现新大陆的快感我就不公布答案了~
欢迎小伙伴们在评论区发表自己的看法~