N!=N*(N-1)!
递归版本:
int factorial(int N)
{
if(N==0) return 1;
return N*factorial(N-1);
}
非递归版本
for(t=1;i=1;i<=N;i++) t*=i;
通常来将,总可以将函数的递归版本转换为非递归版本(一般是循环),反过来,只要用到循环的地方,都可以转换为递归版本。
递归函数很容易‘反序’处理
void traverse(link h,void visit(link))
{
if(h==0) return;
visit(h);
traverse(h->next,visit);
}
void traverseR(link h,void visit(link))
{
if(h==0) return;
traverse(h->next,visit);
visit(h);
}
1、将汉诺塔问题和二进制数步长为1递增,0的个数,对应起来。
2、顺便讨论递归函数子问题求解顺序的问题,()