I think I am doing exactly the same as here but I only get the "even" class at each iteration.
{% for block in entry.articlebody %}
{% set index0 = loop.index0 %}
{% switch block.type %}
{% case 'heading' %}
<h2 class="section-title">{{ block.heading }}</h2><!-- /.section-title -->
{% case 'text' %}
<div class="{{ cycle(['odd', 'even'], index0) }}">{{ block.text }}</div>
{% endswitch %}
{% endfor %}