我目前的脚本是:
function F
{
param ([int]$OF)
$OF / 2
}
$OF = 100
if ((F $OF) -ge 2)
{
F (F $OF)
}
现在结果是25。但我想要做的是为这个脚本添加一个循环。在循环内,结果F (F $OF)
将作为函数的新$OF
反馈。然后该功能再次运行。在结果为-lt 2
之前,它不会停止反馈结果。整个过程更像是优化:在达到目标之前不断降低价值。但是,我不知道如何创建这样的循环。使用FOR LOOP?或者直到停止?
答案 0 :(得分:2)
有两种方法可以做到这一点:
function F
{
param ([int]$OF)
do
{
$result = $of / 2
$of = $result
$result
}
while( $result -gt 2)
}
f -OF 200
-OR
function F2
{
param ([int]$OF)
$of / 2
}
#Declare the parameter value
$val = 100
do
{
$result = F2 -OF $val
$val = $result
$result
}
while($result -gt 2)
答案 1 :(得分:1)
您的问题中的原始描述似乎指向recursive method,因为递归函数可以运行,直到满足条件(与以下相同:一个循环)。在这种情况下,简单的while loop或do/while循环可能会起作用,但这也提供了一个很好的机会来了解后续问题或赋值的递归(例如展平数组或排序/搜索问题)。
关于代码的说明:开始学习命名标准是很好的编码实践。在这种情况下,在函数中创建的变量不应该与其他函数具有相同的名称(除非需要$global)并且一个字母函数很少是个好主意 - 这两者都可能导致混淆并使代码难以后来解析。
function CalculateF #changed from F
{
param ([int] $cur_of) #changed from $OF so no confusion with calling variable
$cur_of
if ($cur_of -gt 2)
{
CalculateF -cur_of ($cur_of/2) # calls itself with halved value
}
}
$OF = 100
if (CalculateF -cur_of $OF -ge 2) #changed these function calls to call the parameter directly
{
CalculateF -cur_of $OF
}
此函数运行,打印当前OF (cur_of
)的值,检查cur_of
的值是否大于 2.使用CalculateF
比cur_of/2
调用自身(即简单的递归)。或者,如果不是,它完成了功能。
由于@Kiran已经放置了带有do / while循环和函数的版本 - 我将把for loop版本放在一个函数根本不需要或有意义的情况下。因为for循环可以对迭代器执行简单的数学计算,而不仅仅是+/- 1,因此:
$val = 100
for ($i=$val; $i -ge 2; $i /= 2)
{
# Sets iterator to value and loops through (dividing by 2 each time)
[int] $i
}
注意 :使用powershell -version 2 ./scriptname.ps1
在上面进行测试,以确保没有版本控制问题