練習再帰関数-1
13906 ワード
Code Eatアルゴリズムのクラシックコース聞いて整理した文章.
不正確な内容や漏れがある場合がありますので、講義をお勧めします.
再帰関数の2つの要素Recursive case:現在の問題が大きすぎると、同じ形式のより小さい部分の問題を再帰的に解決する Base case:問題が十分小さいなら、もっと小さい部分に分けなくてもすぐに答えがわかる 再帰関数を練習するときは、上記の2つの要素を書き出してから問題を解きます.
フィボナッチ数列
不正確な内容や漏れがある場合がありますので、講義をお勧めします.
再帰関数の2つの要素
フィボナッチ数列
質問する
フィボナッチ数列とは,第1項と第2項が1であり,第3項からは前2項の和で定義された数列である.
例えば、第3項は第1項(1)と第2項(1)が加算された2であり、第4項は第2項(1)と第3項(2)が加算された3である.このように、フィボナッチ数列の上位10項は、1、1、2、3、5、8、13、21、34、55である.
パラメータを用いて1つ以上の自然数nを得、n番目のフィボナッチ数を返す再帰関数fibを書く.複文を書くことができません.# n번째 피보나치 수를 리턴
def fib(n):
# 코드를 입력하세요.
# 테스트: fib(1)부터 fib(10)까지 출력
for i in range(1, 11):
print(fib(i))
# 콘솔 출력
1
1
2
3
5
8
13
21
34
55
に答える
fib(1)=1fib(1) = 1fib(1)=1
fib(2)=1fib(2) = 1fib(2)=1
fib(3)=fib(1)+fib(2)fib(3) = fib(1) + fib(2)fib(3)=fib(1)+fib(2)
fib(4)=fib(2)+fib(3)fib(4) = fib(2) + fib(3)fib(4)=fib(2)+fib(3)
.........
fib(n)=fib(n−2)+fib(n−1)fib(n) = fib(n-2) + fib(n-1)fib(n)=fib(n−2)+fib(n−1)
したがって、basecaseとrecursive caseは次のようにエクスポートされます.
n<=2→fib(n)=1n<=2\rightarrow fib(n)=1n<=2→fib(n)=1
n>2→fib(n)=fib(n−2)+fib(n−1)n>2\rightarrow fib(n)=fib(n-2)+fib(n-1)n>2→fib(n)=fib(n−2)+fib(n−1)
コード#コード#
# n번째 피보나치 수를 리턴
def fib(n):
# base case
if n == 1:
return 1
elif n == 2:
return 1
# recursive case
return fib(n-2) + fib(n-1)
# 테스트: fib(1)부터 fib(10)까지 출력
for i in range(1, 11):
print(fib(i))
# 콘솔 출력
1
1
2
3
5
8
13
21
34
55
数値と
質問する
nnnの2番目の三角数(三角形数)は自然数1〜nnnの和である.パラメータで整数値nを取得し、再帰関数triangle numberを作成してnnn番目の三角数を返します.nnは111以上の自然数を仮定する.複文を書くことができません.# 1부터 n까지의 합을 리턴
def triangle_number(n):
# 코드를 입력하세요
# 테스트: triangle_number(1)부터 triangle_number(10)까지 출력
for i in range(1, 11):
print(triangle_number(i))
# 콘솔 출력
1
3
6
10
15
21
28
36
45
55
に答える
tn(1)=1tn(1) = 1tn(1)=1
tn(2)=1+2=tn(1)+2=3tn(2) = 1 + 2 = tn(1) + 2 = 3tn(2)=1+2=tn(1)+2=3
tn(3)=1+2+3=tn(2)+3=6tn(3) = 1 + 2 + 3 = tn(2) + 3 = 6tn(3)=1+2+3=tn(2)+3=6
tn(4)=1+2+3+4=tn(3)+4=10tn(4) = 1 + 2 + 3 + 4 = tn(3) + 4 = 10tn(4)=1+2+3+4=tn(3)+4=10
.........
tn(n)=tn(n−1)+ntn(n) = tn(n-1) + ntn(n)=tn(n−1)+n
したがって、basecaseとrecursive caseは次のようにエクスポートされます.
n=1→tn(n)=1n=1\rightarrow tn(n)=1n=1→tn(n)=1
n>1→tn(n)=tn(n−1)+nn>1\rightarrow tn(n)=tn(n-1)+nn>1→tn(n)=tn(n−1)+n
コード#コード#
# 1부터 n까지의 합을 리턴
def triangle_number(n):
# base case
if n == 1:
return 1
# recursive case
return triangle_number(n-1) + n
# 테스트: triangle_number(1)부터 triangle_number(10)까지 출력
for i in range(1, 11):
print(triangle_number(i))
数値と
質問する
パラメータで整数nを受信し、nビット数の和を返す再帰関数sum digitalsを作成します.繰り返し文を書くことができません.# n의 각 자릿수의 합을 리턴
def sum_digits(n):
# 코드를 작성하세요.
# 테스트
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
# 콘솔 출력
14
15
16
11
20
に答える
sd(22541)=sd(2254)+1sd(22541) = sd(2254) + 1sd(22541)=sd(2254)+1
sd(2254)=sd(225)+4sd(2254) = sd(225) + 4sd(2254)=sd(225)+4
sd(225)=sd(22)+5sd(225) = sd(22) + 5sd(225)=sd(22)+5
sd(22)=sd(2)+2sd(22) = sd(2) + 2sd(22)=sd(2)+2
sd(2)=2sd(2) = 2sd(2)=2
...
sd(n)=sd(nを10で割る)+nを10で割る残りのsd(n)=sd(nを10で割る)+nを10で割る残りのsd(n)=sd(nを10で割る)+nを10で割る
したがって、basecaseとrecursive caseは次のようにエクスポートされます.
n<10→sd(n)=nn < 10\rightarrow sd(n) = nn<10→sd(n)=n
n≧10→sd(nを10で割った分)+nを10で割った残りngeq 10righarrowsd(nを10で割った分)+nを10で割った残りn≧10→sd(nを10で割った分)+nを10で割った残りn
コード#コード#
# n의 각 자릿수의 합을 리턴
def sum_digits(n):
# base case
if n < 10:
return n
# recursive case
return sum_digits(n // 10) + n % 10
# 테스트
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
# 콘솔 출력
14
15
16
11
20
Reference
この問題について(練習再帰関数-1), 我々は、より多くの情報をここで見つけました
https://velog.io/@joje/재귀-함수-연습-1
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
# n번째 피보나치 수를 리턴
def fib(n):
# 코드를 입력하세요.
# 테스트: fib(1)부터 fib(10)까지 출력
for i in range(1, 11):
print(fib(i))
# 콘솔 출력
1
1
2
3
5
8
13
21
34
55
# n번째 피보나치 수를 리턴
def fib(n):
# base case
if n == 1:
return 1
elif n == 2:
return 1
# recursive case
return fib(n-2) + fib(n-1)
# 테스트: fib(1)부터 fib(10)까지 출력
for i in range(1, 11):
print(fib(i))
# 콘솔 출력
1
1
2
3
5
8
13
21
34
55
質問する
nnnの2番目の三角数(三角形数)は自然数1〜nnnの和である.パラメータで整数値nを取得し、再帰関数triangle numberを作成してnnn番目の三角数を返します.nnは111以上の自然数を仮定する.複文を書くことができません.
# 1부터 n까지의 합을 리턴
def triangle_number(n):
# 코드를 입력하세요
# 테스트: triangle_number(1)부터 triangle_number(10)까지 출력
for i in range(1, 11):
print(triangle_number(i))
# 콘솔 출력
1
3
6
10
15
21
28
36
45
55
に答える
tn(1)=1tn(1) = 1tn(1)=1
tn(2)=1+2=tn(1)+2=3tn(2) = 1 + 2 = tn(1) + 2 = 3tn(2)=1+2=tn(1)+2=3
tn(3)=1+2+3=tn(2)+3=6tn(3) = 1 + 2 + 3 = tn(2) + 3 = 6tn(3)=1+2+3=tn(2)+3=6
tn(4)=1+2+3+4=tn(3)+4=10tn(4) = 1 + 2 + 3 + 4 = tn(3) + 4 = 10tn(4)=1+2+3+4=tn(3)+4=10
.........
tn(n)=tn(n−1)+ntn(n) = tn(n-1) + ntn(n)=tn(n−1)+n
したがって、basecaseとrecursive caseは次のようにエクスポートされます.
n=1→tn(n)=1n=1\rightarrow tn(n)=1n=1→tn(n)=1
n>1→tn(n)=tn(n−1)+nn>1\rightarrow tn(n)=tn(n-1)+nn>1→tn(n)=tn(n−1)+n
コード#コード#
# 1부터 n까지의 합을 리턴
def triangle_number(n):
# base case
if n == 1:
return 1
# recursive case
return triangle_number(n-1) + n
# 테스트: triangle_number(1)부터 triangle_number(10)까지 출력
for i in range(1, 11):
print(triangle_number(i))
数値と
質問する
パラメータで整数nを受信し、nビット数の和を返す再帰関数sum digitalsを作成します.繰り返し文を書くことができません.# n의 각 자릿수의 합을 리턴
def sum_digits(n):
# 코드를 작성하세요.
# 테스트
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
# 콘솔 출력
14
15
16
11
20
に答える
sd(22541)=sd(2254)+1sd(22541) = sd(2254) + 1sd(22541)=sd(2254)+1
sd(2254)=sd(225)+4sd(2254) = sd(225) + 4sd(2254)=sd(225)+4
sd(225)=sd(22)+5sd(225) = sd(22) + 5sd(225)=sd(22)+5
sd(22)=sd(2)+2sd(22) = sd(2) + 2sd(22)=sd(2)+2
sd(2)=2sd(2) = 2sd(2)=2
...
sd(n)=sd(nを10で割る)+nを10で割る残りのsd(n)=sd(nを10で割る)+nを10で割る残りのsd(n)=sd(nを10で割る)+nを10で割る
したがって、basecaseとrecursive caseは次のようにエクスポートされます.
n<10→sd(n)=nn < 10\rightarrow sd(n) = nn<10→sd(n)=n
n≧10→sd(nを10で割った分)+nを10で割った残りngeq 10righarrowsd(nを10で割った分)+nを10で割った残りn≧10→sd(nを10で割った分)+nを10で割った残りn
コード#コード#
# n의 각 자릿수의 합을 리턴
def sum_digits(n):
# base case
if n < 10:
return n
# recursive case
return sum_digits(n // 10) + n % 10
# 테스트
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
# 콘솔 출력
14
15
16
11
20
Reference
この問題について(練習再帰関数-1), 我々は、より多くの情報をここで見つけました
https://velog.io/@joje/재귀-함수-연습-1
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
# n의 각 자릿수의 합을 리턴
def sum_digits(n):
# 코드를 작성하세요.
# 테스트
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
# 콘솔 출력
14
15
16
11
20
# n의 각 자릿수의 합을 리턴
def sum_digits(n):
# base case
if n < 10:
return n
# recursive case
return sum_digits(n // 10) + n % 10
# 테스트
print(sum_digits(22541))
print(sum_digits(92130))
print(sum_digits(12634))
print(sum_digits(704))
print(sum_digits(3755))
# 콘솔 출력
14
15
16
11
20
Reference
この問題について(練習再帰関数-1), 我々は、より多くの情報をここで見つけました https://velog.io/@joje/재귀-함수-연습-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol