求使用C语言实现递归回溯和迭代回溯两种算法的阶乘?
答案:3 悬赏:70 手机版
解决时间 2021-01-29 12:04
- 提问者网友:你给我的爱
- 2021-01-28 12:21
淌自己的汗 吃自己的饭 自己的事情自己干 ,靠天靠人不是好汉,我决定还是自己来玩吧感谢楼下两位的回答
最佳答案
- 五星知识达人网友:空山清雨
- 2021-01-28 12:38
递归算法
#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;
}
#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楼网友:往事埋风中
- 2021-01-28 14:04
回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。
用回溯算法解决问题的一般步骤为:
一、定义一个解空间,它包含问题的解。
二、利用适于搜索的方法组织解空间。
三、利用深度优先法搜索解空间。
四、利用限界函数避免移动到不可能产生解的子空间。 问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。
而你这个简单的求阶乘问题不需要用到回溯法,因为阶乘的运算规则是已知的明确的,不需要所谓的“探索”。
比如“八皇后”问题,它是已知某种性质,缺没有好的运算规则,所以采用回溯法逐步探索验证。阶乘不具备这样的性质,不需要用回溯法。
- 2楼网友:神的生死簿
- 2021-01-28 12:47
思路:递归求阶乘函数,如果输入的参数等于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;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯