锚病例定义

问题描述:

锚情况下定义如下:所述参数的一个或多个值被指定锚病例定义

的函数的值。

现在让我们来看看递归阶乘函数:

int fact(int n) 
{ 
    if (n == 0) 
     return 1; 
    else 
     return n * fact(n - 1); 
} 

我明白这一点:“被指定功能的价值......” 我得到的;当函数达到锚案时,它只返回1.

我不明白的是,该函数的值是如何“为一个或多个参数值指定的”?

定义是在谈论函数参数还是参数的数学术语?当运行时栈被弹出时,我只是看不到函数的值是为[function]参​​数的一个或多个值指定的。

+0

Thia定义看起来不对我,我认为基本情况应该返回1,否则每个输入将返回零。 –

某些递归函数具有多个基本情况。例如,Fibonacci序列为输入01指定了值,并为更高的值递归。

unsigned int fib(unsigned n) { 
    if (n == 0 || n == 1) { 
     return 1; 
    } else { 
     return fib(n-1) + fib(n-2); 
    } 
} 
+0

我明白了。我真正不明白的是,如果在归纳案例中,fib(n-1)在归纳案例中被替换为1并成为“return 1 + fib(n-2)”,那么我们可以说函数值是为参数值指定的?换句话说,在这种情况下,在归纳情况下“fib(n-1)+ fib(n-2)”是否被认为是参数? –

+0

我不确定你在问什么。唯一的参数是'n'。在归纳情况下,您可以使用不同的参数“n-1”和“n-2”再次调用该函数。 – Barmar

+0

当教科书显示“指定”时,这意味着该输入有预定义的结果,而不必使用归纳法进行计算。 – Barmar

这是指功能参数。这是该函数的静态属性;它在运行时与瞬态状态无关。 “当运行时堆栈弹出时”不是问题。

这个概念是,每个递归必须使我们更接近答案。这意味着在调用树的底部必须有一个绝对的(不是递归的)值。这个答案就是主播案例。

某些进程只有一个锚。斐波那契有两个。有些具有更多,取决于该特定过程的“底部”。