问题描述:

打开网易新闻 查看精彩图片

问题分析:在这个问题中,从第一个灯亮(值为1)还是灭(值为0)开始,若第一个是1,第二个一定是0,只需要考虑第三个灯是1还是0就行了(递归到n+2),若第一个是0,那么第二个可以是0或1(递归到n+1),递归结束的条件是第30个灯是0或者1,即n=30||n=31。

打开网易新闻 查看精彩图片

问题结果:

打开网易新闻 查看精彩图片

问题回顾:

1:C语言没有布尔值,所以不能返回true或者false,但是用C++的编译器就可以,java的也可以。如果想返回递归函数的上一层可以用return 1代替,但是return返回必须是一个值,不可以为空。

2:在递归函数中想让一个变量在递归过程中数值不被重置而且可以一直保持原值增减可以用全局变量如在include后写:int ans=0;