이번에는 JS 공통 알고리즘 사용 시 주의사항이 무엇인가요? 실제 사례를 살펴보겠습니다.
누적 및 축적
누적: 변수에 일련의 데이터를 추가합니다. 마지막으로 누적 결과가 나옵니다
예: 1부터 100까지의 숫자의 누적합을 계산합니다.
공이 높은 곳에서 떨어져 매번 원래 값의 절반으로 돌아옵니다. 10번째 땅에 떨어졌을 때
<script> var h=100; var s=0; for(var i=0;i<10;i++){ h=h/2; s+=h; } s=s*2+100; </script>
누적: 일련의 데이터를 변수에 곱하여 누적 결과를 얻습니다.
일반적인 것은 n
var n=100; var result= 1; for(var i=1;i<=n;i++){ result *=i; }
의 계승입니다. 일반 형식:
Accumulation: V +=e;
Accumulation: v*=e;
V는 축적과 축적을 나타내고, e는 축적/축적 항을 나타냅니다.
알고리즘 핵심 사항:(1) 초기화
v 및 e 초기화
accumulation: v = 0;
Accumulation: v = 1; 누적/곱셈 항이 더 복잡한 경우 여러 개로 분해될 수 있습니다. 하위 항은 별도로 초기화됩니다. 예를 들어, pi를 계산하는 문제에서 누적 항은 기호, 분자, 분모의 세 부분으로 분해됩니다.
(2) 루프의 제어 조건
하나는 바운스 거리 계산 문제, 시퀀스의 처음 20개 항목의 합을 계산하는 문제,
횟수는 고정되어 있습니다. 횟수는 고정되어 있지 않지만 특정 조건이 충족되어야 합니다. 계산 파이 문제에서는 마지막 항의 절대값이 10-6보다 작아야 합니다.
(3) 누적/곱항의 변화를 결정합니다
예를 들어 수열의 처음 20개 항의 합은 현재 분자와 분모의 합을 다음 분모로 사용하고 현재 분모를 다음 분모로 사용합니다. 분자.
또 다른 예는 파이를 구하는 문제인데, 부호를 거꾸로 하고 분모에 2를 더한 후 다음 항을 찾는 문제입니다.
Iteration
반복 방법은 던지는 방법이기도 합니다
규칙: 원하는 결과를 얻을 때까지 계속해서 이전 값을 사용하여 새 값을 얻을 수 있습니다. 반복 문제 해결 방법
1. 반복 변수(기존 값) 찾기
2. 반복 간의 관계 결정
3. 원하는 결과가 무엇인지 파악(루프 종료 조건)
( 1 ) 최종 결과를 아는 것입니다
(2) 루프 수
<script> /* * 1.接受用户输入的俩个数 * 2.一个函数的到最大公约数 * 3.打印这个最大公约数*/ var num1 = Number(prompt("请输入一个数")); var num2 = Number(prompt("请输入一个数")); var result = GCD(num1,num2); alert(result); /* * 函数的功能:得到最大公约数 * 函数名:GCD * 函数的参数:俩个整数 * 返回值:最大公约数*/ /* * 如果num1<num2则交换,确保num1是交大的 * 计算余数 * 当num1(除数),对num2(被除数)的余数不为0,重复一下步骤 * num2=>num1, * 余数=>num2 * 重新计算余数 * 最终的到最大公约数,也就是num2的值*/ function GCD(num1,num2){ /*return0;*/ if(num1<num2){ var t = num1; num1=num2; num2 = t; } var remainder = num1%num2; while(remainder!= 0){ num1=num2; num2= remainder; remainder=num1%num2; } returnnum2; } </script>
Recursion
수학적 규칙 찾기: 원하는 결과가 나올 때까지 공식을 통해 다음 항목의 값을 계산합니다For 예: 토끼가 새끼를 낳습니다: 처음 두 항목을 통해 다음 항목을 얻습니다
<script> /* * 一般而言,兔子在出生俩个月后,就有繁殖能力 * 一对兔子每个月能生出一对小兔子来 * 如果所有的兔子都不死,那么一年以后总共有多少对兔子*/ /* * 月份 0 1 2 3 4 5 6 * 幼崽 1 1 1 2 3 5 8 * 成年 0 0 1 1 2 3 5 * 总共 1 1 2 3 5 8 13 * */ /* * 接收用户输入的月份 * 计算兔子的对数 * (1)如果经过的月份<2那么兔子的对数为1 * (2)否则用初始的兔子的对数 加上 第一个月的对数为 * 第二个月兔子的个数(an = an-1 +an-2) * 反复使用这个公式,计算出下个月兔子的个数一直到用户输入的月份为止 * 打印的兔子的对数 * */ /* var month = Number(prompt("输入月份")); var sum ; var an =1; var an_1=1; var an_2; if(month < 2){ sum=1; }else{ sum=2; for(var i=1; i<month; i++){ sum= an +an_1; an_1 =an; an = sum; } } alert(sum);*/ /* * 思路2*/ var month = Number(prompt("输入月份")); var rabbit = [1,1]; for(var m=2;m<=month;m++){ rabbit[m]=rabbit[m-1]+rabbit[m-2]; } alert(rabbit[month]); </script>
재귀는 정방향과 역방향으로 나눌 수 있습니다.
Exhaustion
문제에 직면했는데 더 나은 해결책을 찾을 수 없을 때(수학적 공식이나 규칙을 찾을 수 없을 때) "가장 어리석은" 방법을 사용하고 컴퓨터의 빠른 계산 속도를 활용하세요 , 모든 가능성을 나열하고 얻고 싶은 결과를 기록하세요
<script> /* * 公鸡一值钱5,鸡母一值钱三,鸡仔三值钱一 * 百钱买百鸡,问公鸡,鸡母、鸡仔各几何? * x y z * x + y + z = 100 * x*5 + y * 3 + z/3 = 100*/ for(var cock=0;cock<=20;cock++){ for(var hen=0;hen<=33;hen++){ var chihen=100-cock-hen; if(100== cock*5+ hen*3+ chihen/3){ document.write("公鸡一共:"+cock+"鸡母一共:"+hen+"小鸡一共:"+chihen+"<br>") } } } </script>
완전 방법의 특징은 알고리즘이 간단하고 해당 프로그램도 간단하지만 계산량이 많은 경우가 많습니다. 그러나 컴퓨터의 장점은 빠른 계산 속도이기 때문에 이 알고리즘은 장점을 극대화하고 단점을 피할 수 있으며 종종 좋은 결과를 얻을 수 있습니다.
사례: 세 자리 숫자가 있고 일의 자리가 백의 자리보다 크고 백의 자리가 십의 자리보다 크고 각 자리의 합이 각 자리의 곱셈의 곱과 같습니다 , 이 세 자리 숫자를 찾으세요
Recursion
소위 재귀는 함수 내부에서 자신을 호출하는 것입니다. 예를 들어 팩토리얼 문제를 찾으려면 팩트 함수 내부에서 팩트 함수를 호출해야 합니다.
<script> /*计算n的阶乘*/ function fact(n){ if(1== n){ return 1 } return n*fact(n-1); } alert(fact(5)); </script>
재귀 알고리즘은 기존 사고 방식에 따라 함수 호출이 한 번에 한 레이어씩 중첩되어 이해하기가 매우 복잡합니다. 레이어별로 반환하면 재귀를 이해하기 위해 마음을 바꿀 수도 있습니다.
재귀는 실제로 크기 n의 문제를 n-1의 문제로 줄여서 해결합니다. 그것은 n과 n-1 사이의 관계를 찾는 것입니다.
이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 자료:
Vue 프로젝트의 VeeValidate 양식 확인 사용 사례 코드 분석
Vue가 vee-validate를 사용하여 양식을 확인하는 단계에 대한 자세한 설명
위 내용은 일반적인 JS 알고리즘 예제 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!