循环算法
㈠ 使用循环结构实现计算N!的算法是
循环结构实现就用迭代,简单来讲递归就是自己调用自己,循环结构一般分为while和for。
以下是递归:
java">//用迭代的方法计算n的阶乘
longfactorial(intn)
{
intresult=1;
while(n>1)
{
result*=n;
n-=1;
}
returnresult;
}
在这一题上,循环的代码就要写长一点,自己动动手吧,不会吃亏的
㈡ 循环的算法完全可以转换为递归算法吗
递归一定可以转循环 循环不一定可以转递归...
㈢ java 循环算法
importjava.text.MessageFormat;
importjavax.script.ScriptEngine;
importjavax.script.ScriptEngineManager;
importjavax.script.ScriptException;
publicclassT{
privatestaticfinalStringT="{0}+13*{1}/{2}+{3}+12*{4}-{5}-11+{6}*{7}/{8}-10";
publicstaticvoidmain(String[]args)throwsScriptException{
int[]a=initArray(9);
p(0,a);
}
privatestaticvoide(int[]a)throwsScriptException{
Stringe=MessageFormat.format(T,a[0],a[1],a[2],a[3],a[4],a[5],
a[6],a[7],a[8]);
ScriptEngineManagermanager=newScriptEngineManager();
ScriptEngineengine=manager.getEngineByName("javascript");
Numbern=(Number)engine.eval(e);
if(n.intValue()==66&&n.doubleValue()==n.intValue()){
System.out.println(e+"="+66);
}
}
privatestaticint[]initArray(intn){
int[]a=newint[n];
for(inti=0;i<a.length;i++){
a[i]=i+1;
}
returna;
}
privatestaticvoidp(inti,int[]a)throwsScriptException{
if(i==a.length-1){
e(a);
return;
}
p(i+1,a);
for(intj=i+1;j<a.length;j++){
swap(i,j,a);
p(i+1,a);
swap(j,i,a);
}
}
privatestaticvoidswap(inti,intj,int[]a){
inttemp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
㈣ java for循环算法的一道题
public class Demo{
public static void main(String[] args){
int sum = 0;
for(int i = 1; i <= 99; i += 2){
sum += i;
System.out.println(“结果是:” + sum);
}
}
}
㈤ 算法中的循环
冒泡排序
把一堆数字从小到大排列
for(i=0;i<n;i++)
{
for(j=i;i<n;j++)
{
if(n[i]>n[j])
{
t=n[i];
n[i]=n[j];
n[j]=t;
}
}
}
㈥ C语言算法问题,算法高手进,关于for循环的。
for 循环中的判断条件,能确定的尽量用确定值,而不是用表达式,这是完全正确的,而且最好在程序中这样做,这样可以提高运行效率。
上面的两个循环语句,从写法上来说,应该用第二个,既然已经确定是 104 了,何必用 100 + 4 呢?
不过 运行速度未必会有区别, C++ 有常量表达式的概念,如果是常量表达式,在编译时 编译器就会计算常量表达式的值,并用计算后的值替换常量表达式。
所以在正常情况下,第一个循环可能在编译器生成代码时, 已经自动地 将 100 + 4 替换成 104 啦,所以运行速度并无区别,但 这个特性与编译器的优化有关,不过 现代的C++编译器都能优化这种情况。
㈦ 算法中的for循环与while循环
你说的什么鬼啊
㈧ floyd算法的三重循环问题
三层循环的意思。第一层就是加入K的中间点,第二层和第三层循环是求每一对顶点在加入新的点后是否存在距离更近的路径,所以K只能放在最外层。也就是说你再加入新的点后,再进行判断每对顶点是否距离有变,就相当于一个前提条件。
㈨ 求递归循环 算法
#include<stdio.h>#include <windows.h>
void Calc(BYTE *bpData, long nDataSize, int * npMask, long nMaskSize,
long nCurrentLevel, BYTE * bpOutput)
{
if (nCurrentLevel>=nDataSize)
{
long i;
for (i=0; i<nDataSize-1; i++)
{
printf("%d, ", bpOutput[i]);
}
printf("%d\n", bpOutput[i]);
return;
}
//Find if this level is in the Mask arr.
bool bFound = false;
for (long k=0; k<nMaskSize; k++)
{
if (npMask[k] == nCurrentLevel+1)
{
bFound = true;
break;
}
}
if (! bFound)
{
bpOutput[nCurrentLevel] = bpData[nCurrentLevel];
Calc(bpData, nDataSize, npMask, nMaskSize, nCurrentLevel+1, bpOutput);
}else
{
for (long n=0; n<=9; n++)
{
bpOutput[nCurrentLevel] = (BYTE)n;
Calc(bpData, nDataSize, npMask, nMaskSize, nCurrentLevel+1, bpOutput);
}
}
}
void main()
{
BYTE bpTemp[100];
BYTE bp1[1] = {11};
int arr1[1] = {1};
printf("------------------------------------\n");
Calc(bp1, 1, arr1, 0, 0, bpTemp);
getchar();
printf("------------------------------------\n");
Calc(bp1, 1, arr1, 1, 0, bpTemp);
getchar();
BYTE bp2[4] = {11, 12, 13, 14};
int arr2[2] = {1, 2};
printf("------------------------------------\n");
Calc(bp2, 4, arr2, 2, 0, bpTemp);
getchar();
BYTE bp3[8] = {11, 12, 13, 14, 15, 16, 17, 18};
int arr3[4] = {3,4,7,8};
Calc(bp3, 8, arr3, 4, 0, bpTemp);
getchar();
}
使用递归函数。
测试了几种情形。
按回车可以继续。
㈩ 套了多个for循环,有没有什么算法加快运算时间
理论上是每次都计算,但实际上编译器会对这个进行优化,直接使用8代替这个“3+5”,所以一般情况下程序运行的时候一次计算都不需要,因为这个计算是在编译阶段进行的,VS2008环境下,反汇编代码如下(倒数第2行最后那个8就是“3+5”的替代品): for(int i = 0; i < 5+3; i++) 013D17CE mov dword ptr [i],0 013D17D5 jmp wmain+30h (13D17E0h) 013D17D7 mov eax,dword ptr [i] 013D17DA add eax,1 013D17DD mov dword ptr [i],eax 013D17E0 cmp dword ptr [i],8 013D17E4 jge wmain+45h (13D17F5h) 但是如果与i进行比较的不是常量表达式,是一个函数的返回值,形如for(int i = 0; i < GetValue(); i++),那么每循环一次这个 GetValue()函数都将会被调用一次。