プログラミング-演習12 c -再帰とラムダ関数
14629 ワード
再帰関数とラムダ関数
This is a continuation of
exercise 12 b (A function that returns a value)
再帰関数
関数の作成方法、関数への引数の渡し、関数の呼び出し方について説明しました.私たちはたくさんやった.頻繁に休憩を取るなら、それは私たちを支払うでしょう.
Kindly take a break to revise what we learnt so far and also take a long break away from PC.
この演習では、関数の詳細について議論します.再帰関数は、それ自体を呼び出します.ベースケースが偽になるまで、そうします.
を実装しましょうfactorial 関数.この関数は整数入力になります.入力が1より小さい場合、この関数は1を返します.
整数入力を指定します.
n
. n
要因はn!
= n * (n - 1) * (n - 2) * (n - 3) * ... * 1
. ベースケースは1です.我々が得るとき1
, 再帰関数を中断または終了します.例1 -ループ用
factorial = 1
n = int(input("Enter n: "))
if n < 1:
print(1)
else:
for i in range(1, n+1):
factorial *= i
print(factorial)
# input output
# 3 6
# 5 720
# 15 1307674368000
例2 -関数
さて、再帰関数を使って上記を実装します.
def factorial(n):
if n < 1:
return 1
else:
return n * factorial(n-1)
def factorial(n)
: 整数引数と呼ばれる関数を定義します.n
. if n < 1: return 1
: ベースケースをチェックし、1を返します.この関数は1を返し、実行を停止します.else: return n * factorial(n-1)
: if n > 1
, 帰りますn
乗算factorial(n-1)
. n=5
, 以下のようにします:factorial(5) = 5 * factorial(4)
factorial(5) = 5 * 4 * factorial(3)
factorial(5) = 5 * 4 * 3 * factorial(2)
factorial(5) = 5 * 4 * 3 * 2 * factorial(1)
factorial(5) = 5 * 4 * 3 * 2 * 1
factorial(5) = 720
例3
の実装Euclid GCD algorithm . 私たちは2つの数の最大公約数に興味があります.
gcd(a, b)
.アルゴリズム
a
, b
2つの数字であるr
残りであるa
and b
, a % b
r
is 0
, b
分割するa
, もしそうならばb
b
to a
and r
to b
そして、第2ステップを繰り返すa = int(input("Enter a: "))
b = int(input("Enter b: "))
while True:
r = a % b
if r == 0:
print(b)
break
else:
a = b
b = r
# a = 72
# b = 96
# gcd(a, b) = 24
例4
再帰の使用
def gcd(a, b):
r = a % b
if r == 0:
return b
else:
return gcd(b, r)
print(gcd(72, 96)) # 24
このコードを短くしましょうdef gcd(a, b):
if a % b == 0:
return b
return gcd(b, a % b)
ラムダ関数
ラムダ関数は匿名関数と呼ばれます.名前のない関数です.私たちはそれがワンタイム機能だと言うことができます.を使用してラムダ関数を作成します
lambda
キーワード.単に(lambda comma-separated-args: body)
構造
与えられた整数を1ずつ増やして値を返す関数を考えましょう.
def inc(n):
return n + 1
print(inc(2)) # 3
上のスニペットはdef
関数を作成するキーワード.では、どのように使用するかを見ましょうlambda
キーワードは、同じ関数を作成します.例5
print((lambda x: x+1)(2)) # 3
従って、ラムダ関数の構造は通常の関数と同様です.我々はlambda
の代わりにキーワードdef
, この関数には名前がありません.パラメータはラムダキーワードから切り離されたスペースコンマです.関数本体はコロンで区切られています.:
.例5から、ラムダ関数に引数2を渡しました.がどのように渡されたかに注目してください.
例6
ラムダ関数に複数の引数を渡すことができます.利用できないことに注意してください
return
ラムダ関数.つの数字を比較し、より少ない数を返すラムダ関数を使いましょう.print((lambda a, b: a if a < b else b)(2, 4)) # 2
ふつう私たちは書きました.def min_val(a, b): return a if a < b else b
print(min_val(2, 4)) # 2
これは以下の通りです.def min_val(a, b):
if a < b:
return a
else: # we can comment out the else:
return b
ラムダ関数に名前を割り当てることができます
考慮する
example 5
与えられた数を1だけインクリメントする場合、ラムダ関数を変数に渡し、後で関数のような変数を呼び出すことができます.inc = (lambda n: n + 1)
print(inc(2)) # 3
あなたは以下のこれらの2つのスニペットの違いを言うことができますか?# first func
inc = (lambda x: x + 1)
print(inc(4))
# second func
inc = (lambda x: x + 1)(4)
print(inc)
first func
, ラムダ関数をinc
. inc
が呼び出され、値の引数が呼び出されました.4
が渡された.それで、我々はそれを言うことができますinc
関数です.second func
, 価値の議論4
がラムダ関数に渡された.結果はinc
. So inc
もう一つの価値変数です.4 + 1 = 5
関数ではなく.実践
[[47, 3, 1, 34], [0. - 3, 4], [7, 21, 13, 37, 8]]
1 to 5
, リターン15
. 12345
, リターン15
概要
def function_name(some_args):
# some code
func_name(some_args)
return
関数を終了し、関数から値を返すReference
この問題について(プログラミング-演習12 c -再帰とラムダ関数), 我々は、より多くの情報をここで見つけました https://dev.to/otumianempire/python3-programming-exercise-12-c-2j9jテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol