f(1)=1
:递归的终止条件(递归出口)f(n)=n*f(n-1) n > 1
:递归体,给出了f(n)的值与f(n-1)的值之间的关系。直接求值,不需要回溯,使用中间变量保存中间结果,称为直接转换法。
题目:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2) n>2
int f(int n)
{
int i,s;
s1 = 1;//s1用于保存f(n-1)的值
s2 = 1;//s2用于保存f(n-2)的值
s = 1;
for(i=3;i<=n;i++)
{
s = s1+s2;
s2 = s1;
s1 = s;
}
return (s);
}
NULL
不能直接求值,需要回溯,使用栈保存中间结果,称为间接转换法
//伪算法过程
将初始状态s0进栈
while(栈不为空)
{
退栈,将栈顶元素赋给s
if(s是要找的结果)
返回
else
{
寻找到s的相关状态s1
将s1进栈
}
}
//非递归方法计算一棵二叉树的所有结点个数
#define n 100
typedef struct node
{
char data;
struct node *left,*right;
}bltree;
int counter(bltree *t)
{
bltree *st[n],*p;
int top,count = 0;
if(t!=NULL)
{
top = 1;
stack[top] = t;//将根结点入栈
while(top > 0)
{
count++;//结点计数器增1
node = stack[top];//将栈顶结点退栈并赋给node
top--;
if(node->left != NULL)
{
top++;
stack[top]=node->left;
}
if(node->right != NULL)
{
top++;
stack[top]=node->right;
}
}
}
return (count);
}
NULL
原文:https://www.cnblogs.com/fewolflion/p/13184057.html