이 계단을 오르는 프로그래밍 문제를 너는 풀 수 있니?(귀속과 교체 사상)
프로그래밍 문제: n개의 계단이 있는데, 한 번에 한 걸음 또는 두 걸음만 올라갈 수 있으며, 모두 몇 가지 걸음걸이가 있습니까?
고찰의 지식점:
귀속과 순환의 교체
귀속:
n의 값
길을 걷다
산식
일
한 번에 한 걸음만
f(1) = 1
이
(1) 한 번에 1보 (2) 직접 2보
f(2) = 2
삼
(1) f(1)에 먼저 도착한 경우, f(1)에서 직접 2단계(2)에 먼저 도착한 경우, f(2)에서 직접 1단계
f(3) = f(2) + f(1) = 3
사
(1) f(2)에 먼저 도착한 경우, f(2)에서 직접 2단계(2)에서 f(3)에 먼저 도착한 경우, f(3)에서 직접 1단계
f(4) = f(3) + f(2) = 5
...
...
...
n = x
(1) f(n-2)에 먼저 도착한 경우, f(n-2)에서 직접 2단계(2) f(n-1)에 먼저 도착한 경우, f(n-1)에서 직접 1단계
f(x) = f(x - 2) + f( - 1)
반복 방식의 예제 코드:
public class DiGuiTest {
public static int diGui(int n) {
if (n < 1) {
throw new IllegalArgumentException(n + " 1");
}
if (n == 1 || n == 2) {
return n;
}
return diGui(n - 1) + diGui(n - 2);
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
System.out.println(diGui(40)); // 165580141
long end = System.currentTimeMillis();
System.out.println(" :" + (end - start)); // 633ms
}
}
순환 교체:
one 저장 마지막 1단계, two 저장 마지막 2단계.순환 교체는 이 두 변수 (one, two) 의 값을 끊임없이 수정하는 것이다.
n의 값
길을 걷다
산식
일
한 번에 한 걸음만
f(1) = 1
이
(1) 한 번에 1보 (2) 직접 2보
f(2) = 2
삼
(1) f(1)에 먼저 도착한 경우, f(1)에서 직접 2단계(2)에 먼저 도착한 경우, f(2)에서 직접 1단계
f(3) = two + onef(3) = f(1) + f(2)two = f(2); one = f(1)
사
(1) f(2)에 먼저 도착한 경우, f(2)에서 직접 2단계(2)에서 f(3)에 먼저 도착한 경우, f(3)에서 직접 1단계
f(4) = two + onef(4) = f(2) + f(3)two = f(2); one = f(3)
...
...
...
n = x
(1) f(n-2)에 먼저 도착한 경우, f(n-2)에서 직접 2단계(2) f(n-1)에 먼저 도착한 경우, f(n-1)에서 직접 1단계
f(x) = two + onef(x) = f(x - 2) + f(x - 1)two = f(x - 2); one = f(x - 1)
반복 방식의 예제 코드:
public class XunHunDieDaiTest {
public static int xunHunDieDai(int n) {
if (n < 1) {
throw new IllegalArgumentException(n + " 1");
}
if (n == 1 || n == 2) {
return n;
}
int one = 1; //
int two = 2; //
int sum = 0;
for (int i = 3; i <= n; i++) {
sum = two + one;
one = two;
two = sum;
}
return sum;
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
System.out.println(xunHunDieDai(40)); // 165580141
long end = System.currentTimeMillis();
System.out.println(" :" + (end - start)); // < 1ms
}
}
비교 요약:
방법은 자신을 귀속이라고 부르고 변수의 원값을 이용하여 새로운 값을 내놓는 것을 교체라고 부른다.
귀속:
순환 교체:
.단점: 코드는 귀속이 간결하지 않고 가독성이 좋지 않다..
개인 블로그에 오신 것을 환영합니다.https://wenshixin.gitee.io/blog/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.