<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="baseNumber" select="4"/>
<xsl:variable name="powerOf" select="3"/>
<!--
  Variables:
    $baseNumber = starting number
    $powerOf = $baseNumber to the power of this number
-->
  <xsl:template match="/">
    <xsl:call-template name="for.loop">
      <xsl:with-param name="powerOf" select="$powerOf"/>
      <!-- Other parameters pick up default values -->
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="for.loop">
    <xsl:param name="i" select="1"/>
    <xsl:param name="powerOf" select="0"/>
    <xsl:param name="total" select="1"/>
    <xsl:if test="$i &lt;= $powerOf">
      <xsl:call-template name="for.loop">
        <xsl:with-param name="i" select="$i + 1"/>
        <xsl:with-param name="powerOf" select="$powerOf"/>
        <xsl:with-param name="total" select="$total * $baseNumber"/>
      </xsl:call-template>
    </xsl:if>
    <xsl:if test="$i &gt; $powerOf">
      <xsl:value-of select="$baseNumber"/>
      to the power of <xsl:value-of select="$powerOf"/>
      is <xsl:value-of select="$total"/>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>