当找到阶乘,使用递归(Ruby)时,下面的代码找到整数的阶乘,但在浮点数的情况下失败。我怎么能调整这个? 我想过在数学中使用域名,但我不知道该怎么做。
def factorial num
if num < 0
return "Please provide a whole number."
end
if num <=1
1
else
num * factorial(num-1)
end
end
答案 0 :(得分:4)
过滤掉浮动的最简单方法是使用使它们浮动的原因:) 它们不能完全被1整除。
def factorial num
if (num % 1 != 0 || num < 0)
return "Please provide a whole number."
end
if num <=1
1
else
num * factorial(num-1)
end
end
希望有所帮助。干杯
答案 1 :(得分:0)
虽然@CarySwoveland正确地指出,在数学中,“阶乘”操作仅针对自然数定义,但实数的推广存在于“伽马函数”的名称下。 gamma(n)等于n!对于自然数n。
[更新:正如@JörgWMittag解释的那样,它不是伽马(n),而是伽马(n + 1)等于n!]
伽玛函数在Ruby(see here)中可用,您可以为非自然数调用它。
但是,您需要注意,您的阶乘函数将具有某种不寻常的属性,它有时会返回Fixnum,有时还会返回Float。
答案 2 :(得分:0)
Ruby有一些在这里很有用的类型转换协议。特别是,任何想要充当Integer
的对象都应该响应to_int
。所以,您可以尝试将输入转换为Integer
,Ruby将负责其余的工作:
def factorial(num)
num = num.to_int
# … carry on normally
end
这样,任何想要表现为Integer
的内容都可以在此传递,而任何不符合raise
NoMethodError
的内容都会传递给rescue
。
如果你想真的很好,你可以NoMethodError
和raise
TypeError
NoMethodError
带有描述性消息to_int
。但通常情况下,任何Ruby程序员都理解类型转换协议,而Integer
Integer
表示您传递的内容不是<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<!-- change version as applicable -->
<version>1.2</version>
</dependency>
- 就像期望<?php
public function tourBanner($country){
$extraData = ['zero', 'one', 'two'];
switch($country){
case 'country1':
$bgImage = 'images/inside8.jpg';
break;
case 'country2':
$bgImage = 'images/inside7.jpg';
break;
case 'country3':
$bgImage = 'images/inside5.jpg';
break;
case 'country4':
$bgImage = 'images/inside6.jpg';
break;
default:
$bgImage = 'images/inside10.jpg';
break;
}
return view("your.blade.view", array(
"bgImage" => $bgImage,
'extraData' => $extraData,
));
}
的方法一样类似对象。