主1:关于递归算的证明是证明算法的正确性。
证明所需工具:数学归纳法。
证明分为两个步骤:
1、证明该算法对于任意有意义的输入都可以返回。
2、证明该算法对于任意有意义的输入它的返回都是正确的。
总结,对于任意有意义的输入都可以返回正确的结果。
例子:Hanoi(汉诺)塔问题:
void hanoi(int n,char s,char t,char d) // s=source t=temporary d=destination
{
if(1 == n) // 程序段一
{
printf("%c -> %c\n",s,d); // move s to d
}
else // 程序段二
{
hanoi(n-1,s,d,t);
printf("%c -> %c\n",s,d); // move s to d
hanoi(n-1,t,s,d);
}
}
hanoi(n,'1','2','3'); // 初始调用
对于初始调用第2、3、4参数都是固定的,因此我们只对第一个参数n进行归纳。
第一步:
当 n = 1 时,该函数进入程序段一,打印 1 -> 3 后就返回了,因此该函数可以返回。
假设: