我將如何通過這個單元測驗?
fenc(4)==[[[[[], [[]]], [[[], [[]]]]], [[[[], [[]]], [[[], [[]]]]]]], [[[[[], [[]]], [[[], [[]]]]], [[[[], [[]]], [[[], [[]]]]]]]]]
我完全被難住了,這是我唯一的背景。
f(0) = [](0 映射到空串列)f(n 1) = [f(n),[f(n)]](n 1 映射到包含 f(n) 和單例 f(n) 的串列)
關閉我得到:
def fenc(i):
arr = []
if i > 1:
arr.append([])
arr.append(fenc(i - 1))
return arr
fenc(4) 輸出:
[[], [[], [[], []]]]
我不是在尋找一個完整的 sloution,只是一些強有力的指標。如果可能,請不要包含任何可能“解決問題”的內容,因為我需要了解其背后的基本原理。
uj5u.com熱心網友回復:
想通了,其實很簡單。
def fenc(i):
if i == 0:
return []
else:
return [fenc(i-1), [fenc(i-1)]]
uj5u.com熱心網友回復:
如果您想遵循自然數的真實數學定義,建議使用遞回方法。我的實作使用字串而不是串列。
生成自然數:
- 遵循數學集合論定義
def natural_number(n):
def natural_number_(n):
if n == 0: return '[]'
return '{N}, [{N}]'.format(N=natural_number_(n-1))
return '[{}]'.format(natural_number_(n))
for i in range(4):
print(i, natural_number(i))
輸出
0 []
1 [[]]
2 [[], [[]]]
3 [[], [[]], [[], [[]]]]
4 [[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
- 遵循單元測驗(非自然數):
def unnatural_number(n):
if n == 0: return '[]'
return '[{N}, [{N}]]'.format(N=unnatural_number(n-1))
for i in range(4):
print(i, unnatural_number(i))
輸出
0 []
1 [[], [[]]]
2 [[[], [[]]], [[[], [[]]]]]
3 [[[[], [[]]], [[[], [[]]]]], [[[[], [[]]], [[[], [[]]]]]]]
4 [[[[[], [[]]], [[[], [[]]]]], [[[[], [[]]], [[[], [[]]]]]]], [[[[[], [[]]], [[[], [[]]]]], [[[[], [[]]], [[[], [[]]]]]]]]]
檢查是否unnatural_number滿足要求
check = unnatural_number(4) == '[[[[[], [[]]], [[[], [[]]]]], [[[[], [[]]], [[[], [[]]]]]]], [[[[[], [[]]], [[[], [[]]]]], [[[[], [[]]], [[[], [[]]]]]]]]]'
print(check)
# True
注意事項
- 的之間的差
natural_number并且unnatural_number是最外面支架:'{N}, [{N}]''[{N}, [{N}]]'<- 不是很自然!
- 這種自然數的構造最初是由馮諾依曼指出的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337435.html
上一篇:(functree)元素的總和
下一篇:遞回二分查找,切片二分法
