!采用递归和非递归方法求解F(n)
来源:互联网 发布:倩女幽魂显示设置优化 编辑:程序博客网 时间:2024/06/05 06:25
/*文件名:exp6-4.cpp*/
#include <stdio.h>
#define MaxSize 100
int fun1(int n)
{
int f;
if (n==0)
return(1);
else
{
f=fun1(n/2);
return(n*f);
}
}
int fun2(int n)
{
int i=1,f=1;
while (n>0)
{
f=n*f;
n=n/2;
}
return(f);
}
int fun3(int n)
{
struct
{
int vn; /*保存n值*/
int vf; /*保存fun3(n)值*/
int tag; /*标识是否求出fun3(n)值,1:未求出,0:已求出*/
} St[MaxSize]; /*定义栈*/
int top=-1;
top++; /*初值进栈*/
St[top].vn=n;St[top].tag=1;
while (top>-1) /*栈不空时循环*/
{
if (St[top].tag==1) /*未计算出栈顶元素的vf值*/
{
if (St[top].vn==0) /*(1)式*/
{ St[top].vf=1;
St[top].tag=0;
}
else /*(2)式*/
{
top++;
St[top].vn=St[top-1].vn/2;
St[top].tag=1;
}
}
else if (St[top].tag==0) /*已计算出vf值*/
{
if (St[top-1].vn>0) /*(2)式*/
{
St[top-1].vf=St[top-1].vn*St[top].vf;
St[top-1].tag=0;
top--;
}
}
if (top==0 && St[top].tag==0) /*栈中只有一个已求出vf的元素时退出循环*/
break;
}
return St[top].vf;
}
void main()
{
int n=12;
printf(" 各种方法求解结果如下:\n");
printf(" fun1(%d)=%d\n",n,fun1(n));
printf(" fun2(%d)=%d\n",n,fun2(n));
printf(" fun3(%d)=%d\n",n,fun3(n));
}
- !采用递归和非递归方法求解F(n)
- 采用递归和非递归方法求解汉诺塔问题
- 使用递归和非递归求f(m,n)
- 用递归和非递归的方法求解n的k次方
- 递归方法求解n!
- 求二叉树镜像 -- 采用递归和非递归方法
- 迷宫路径的求解(非递归方法和递归方法)
- 复习篇 -- 递归和非递归方法实现N!
- 两种方法求n!,递归和非递归调用
- 非递归求解N皇后问题(回溯法)
- N皇后问题非递归求解
- (递归+非递归)迷宫求解
- 用递归和栈的方法实现N皇后求解
- n后问题————回溯法求解(递归与非递归)
- 用递归方法求 f(n)
- JAVA中分别采用递归和非递归方法创建菜单栏
- 求二叉树节点数 -- 采用递归和非递归方法
- 二叉树叶子节点个数计算 -- 采用递归和非递归方法实现
- iis7 发布mvc3 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
- c#执行DOS命令
- ibatis解决sql注入问题
- 解压u-boot源码包错误解决
- hibernate实体—复合主键、视图的注解配置方法
- !采用递归和非递归方法求解F(n)
- sizeof()用法,double对位域计算的影响
- Hibernate中HQL语句的使用
- mssql 2008 ' 禁止在 .NET Framework 中执行用户代码,启用 "clr enabled" 配置选项' 处理办法
- C#的操作符??
- IBM硬件默认的管理地址
- Ubuntu 在线安装manpage手册方法
- 在IE8里面,弹出网页常常打开的是另外一个标签,怎么办?
- Seafile - 最好的 Dropbox 开源替代,面向团队而设计