📜  TCL脚本演示递归过程

📅  最后修改于: 2021-06-28 08:01:53             🧑  作者: Mango

在本文中,我们将介绍一组称为TCL的独特过程。您可能已经猜到的这些过程称为递归过程。这些类似于其他语言中的递归函数。因此,为了更好地理解它们,我们将考虑使用相同的过程作为C编程中的递归函数编写,以更好地理解语法。

前提条件–
如果您想了解有关TCL的更多信息,请阅读以下文章。

  • https://www.geeksforgeeks.org/basics-of-ns2-and-otcltcl-script/
  • https://www.geeksforgeeks.org/tcl-script-to-determine-whether-a-number-is-positive-negative-or-zero-using-if-else-statement/
  • https://www.geeksforgeeks.org/tcl-script-to-find-sum-of-n-natural-numbers-using-looping-statements/

例子 –
我们将考虑一个简单的示例,其中我们的目标是通过递归调用sumofnnumbers {}来找到n个自然数的和。让我们以块的形式理解此代码。

步骤1 :
我们的第一步是定义一个过程,该过程将一直调用直到n = 1。我们使用proc关键字定义一个过程。在我们这样做之前,让我们考虑一下常规过程如何查找n个自然数之和。

proc sumofnnumbers {a} {
 set sum 0
 for {set i $a} {$i>=1} {incr i -1} {
    set sum [expr $sum+$i]
 }
 return $sum
}

如您在上面看到的,我们使用常规的for循环定义过程。当然,我们可以从1到n或从n到1计数。在这种情况下,我们从n到1计数。

第2步 :
我们可以使用递归过程来实现上面所示的相同过程,该递归过程最多调用n = 1,并实现类似于常规循环语句的功能。

proc sumofnnumbers {a} {
if {$a>0} {
  return [expr $a+[sumofnnumbers [expr $a-1]]]
} else {
  return 0
}
}

笔记 :

  • 过程的语法必须完全如上所述。如果您忽略空格或在新行上打开花括号,则结果将是错误的。
  • 可以使用相同的过程来查找n个自然数的乘积。您需要做的就是用’*’替换’+’并在else块中返回1而不是0。

第三步:
让我们将相同的代码块与C语言中的代码块进行比较,以更好地理解语法。

int sumofnnumbers(int a)
{
if(a>0)
 {
   return a+sumofnnumbers(a-1);
 }
else
 {
   return 0;
 }
}

第四步 :
下一步是提示用户输入数字,并将其作为参数传递给过程– sumofnnumbers {} 。我们使用获取从用户那里获取输入。

puts "Enter the number"
gets stdin a
puts "The sum of $a numbers is [sumofnnumbers $a]"

步骤5:
带有输出的整个代码如下。

代码 –

proc sumofnnumbers {a} {
if {$a>0} {
  return [expr $a+[sumofnnumbers [expr $a-1]]]
} else {
  return 0
}
}
puts "Enter the number"
gets stdin a
puts "The sum of $a numbers is [sumofnnumbers $a]"

输出 :