If else语句在递归函数中的易错点
Eg:求0到n之间所有偶数的和(要求用递归函数)
#include<stdio.h>
int main()
{
int oh(int n);
int n;
scanf("%d",&n);
printf("%d",oh(n));
}
int oh(int n)
{
int x=1;
if(n%2!=0)
n=n-1;
else if(n==0)//这个前面不能放else,why?因为需要将if(n%2!=0)这部分条件与下面几个条件分隔开来,不然输入n为奇数就直接避开最后一个条件,return x了
x=0; //所以说if加上else语句就是一个管道,只要你输入的条件满足这个管道里的任何一个条件,那么程序将直接跳到最后
else x=oh(n-2)+n;
return x;
}*/
对if else的理解,当要用到多个if 语句时。每一个If就像是水管,else时接头,if中的条件是开关,而输如需要判断的数就是一个球。
1,
当所有的管子都链接起来后(只有一根管子),输入小球,满足条件就一直滚下去直不到满足条,开关打开小球从边上出去(执行语句),求从开口处出去直接到底部(程序最后),或者一直满足条件从管道落到底部。
2.
当不是所有的管子都连接起来是(但是没跟管子都是口对着口的),当输入的小球满足第一根管子时,开关打开小球从边上掉入下一根管子。不满足时,小球还是直接掉入下一个管子。如此重复直到最后。
在本题中,递归函数中执行递归的语句就像是发射炮,直接将小球弹回第一根管子。所以else的存不存在就关乎着整个程序的执行。在本题中,有俩else就只有一根管子。当小球是奇数,小球不满足条件直接打开开关从管子边出来直接到底部(结束程序)。没有第一个else就能够在执行完上面语句后还能继续执行完递归语句。