我正在阅读Scala for the Impatient,第2章,还有一个练习题,我不明白它到底想要什么:
编写一个计算x ^ n的函数,其中n是一个整数。使用 遵循递归定义:
- X ^ n = y * y如果n是偶数且正数,则y = x ^(n / 2)
- X ^ n = x * x ^(n-1),如果n为奇数且为正
- x ^ 0 = 1
- x ^ n = 1 / x ^ -n如果n为负
如果问题需要x ^ n,我可以使用scala.math中定义的pow方法:
redis-server.exe redis.windows.conf
答案 0 :(得分:2)
问题是要求(重新)在整数上实现递归的pow函数:
<?php
//get all terms (e.g. categories or post tags), then display all posts in each term
$taxonomy = 'category';// e.g. post_tag, category
$param_type = 'category__in'; // e.g. tag__in, category__in
$term_args=array(
'orderby' => 'name',
'order' => 'ASC'
);
$terms = get_terms($taxonomy,$term_args);
if ($terms) {
foreach( $terms as $term ) {
$args=array(
"$param_type" => array($term->term_id),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => 3,
'caller_get_posts'=> 1,
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
echo 'List of Posts in '.$taxonomy .' '.$term->name;
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
if (has_post_thumbnail($post->ID)) {
$retina = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'homepage-thumb-retina' );
echo '<img src="' . $retina[0] . '" alt="' . the_title() . '" width="24" height="24" />' ;
};
endwhile;
}
}
}
wp_reset_query(); // Restore global post data stomped by the_post().
?>
您需要编写比天真def pow(x: Int, y: Int): Int = ...
算法更智能的实现:
O(n)
尝试使用给定的递归定义......
要直接回答您的问题,我不认为您可以使用def slowPow(x: Int, y: Int): Int =
if (y == 0) 1 else x * slowPow(x, y - 1)
中的问题回避问题。如您所述,它仅适用于scala.math
。也不是递归的,也不是Doubles
中实现的。
答案 1 :(得分:0)
def pow(x: Double, n: Int): Double = {
if (n == 0) 1
else if (n < 0) 1 / (x - n)
else if (n % 2 == 1) x * pow(x, n - 1)
else {
val y = pow(x, n / 2)
y * y
}
}
pow(2, 0) == 1
pow(2, -2) == 0.25
pow(2, 4) == 16
pow(2, 5) == 32