永发信息网

求使用C语言实现递归回溯和迭代回溯两种算法的阶乘?

答案:3  悬赏:70  手机版
解决时间 2021-01-29 12:04
淌自己的汗 吃自己的饭 自己的事情自己干 ,靠天靠人不是好汉,我决定还是自己来玩吧感谢楼下两位的回答
最佳答案
递归算法
#include<stdio.h>
double fun(int n);
int main(void)
{
int n;
printf("Enter n:");
scanf("%d",&n);
printf("%lf\n",fun(n));
return 0;
}
double fun(int n)
{
if(n==0||n==1)
return 1;
else
return n*fun(n-1);
}

迭代算法
#include <stdio.h>
int main()
{
int i,n,s=1;

scanf("%d",&n);

for(i=1;i<=n;i++)
s*=i;

printf("%d!=%d\n",n,s);

return 0;
}
全部回答
回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。 用回溯算法解决问题的一般步骤为:   一、定义一个解空间,它包含问题的解。   二、利用适于搜索的方法组织解空间。   三、利用深度优先法搜索解空间。   四、利用限界函数避免移动到不可能产生解的子空间。 问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。 而你这个简单的求阶乘问题不需要用到回溯法,因为阶乘的运算规则是已知的明确的,不需要所谓的“探索”。 比如“八皇后”问题,它是已知某种性质,缺没有好的运算规则,所以采用回溯法逐步探索验证。阶乘不具备这样的性质,不需要用回溯法。
思路:递归求阶乘函数,如果输入的参数等于1则返回1,否则返回n乘以该函数下次递归。 参考代码: #include int fun(int n) { if(n==1||n==0) return 1;//如果参数是0或者1返回1 return n*fun(n-1);//否则返回n和下次递归的积 } int main() { int n; scanf("%d",&n); printf("%d\n",fun(n)); return 0; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
frontier是什么意思
马李河村地址在什么地方,想过去办事
张家港国威机动车评估有限公司地址好找么,我
乞火的意思是什么啊?知道的请说下!
下列在自觉控制下实现的有()。A.思维方向B.思
湖北黄梅最近的高铁站或机场是那个
杨营村地址在哪,我要去那里办事
张家港富骏地址在什么地方,我要处理点事
片鳞残甲的意思是什么啊?知道的请说下!
怪物猎人OL远航里面是有多少怪啊?打来打去都
贺家川村地址有知道的么?有点事想过去
张家港府诚汽车亚飞汽车有限公司怎么去啊,我
求助:火车站有寄存行李的地方吗
霹雳布袋戏谁是主角
一个女生唱的歌词里有一句“对你死心塌地”是
推荐资讯
小猫看电视拳击也跟着打什么意思
这位欧美明星是谁啊,叫什么名字?
请问暨南大学心理学硕士参与全国统考吗
天天富翁ios版打不了名字
奇思的意思是什么啊?知道的请说下!
如何使腿变得修长
苹果7ld忘记了要怎么才能解锁
我的世界大橙子妹子庄园二周目背景音乐
规摹的意思是什么啊?知道的请说下!
小米无限流量卡多少钱一张 小米无限流量卡资
自转(-zhuàn)的意思是什么啊?知道的请
怎么样才可以登陆我女朋友微信?我想查看她里
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?