If else语句在递归函数中的易错点

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就能够在执行完上面语句后还能继续执行完递归语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值