回答編集履歴

2

追記

2018/10/12 09:45

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -33,3 +33,49 @@
33
33
 
34
34
 
35
35
  ```
36
+
37
+
38
+
39
+ ---
40
+
41
+
42
+
43
+ 下の方法だと元のコードのロジックを活かせます。
44
+
45
+ ```python
46
+
47
+ def coin_sums2(remainder, coin):
48
+
49
+ total = 0
50
+
51
+ def coin_sums_i(remainder, coin):
52
+
53
+ nonlocal total
54
+
55
+ if coin < 0:
56
+
57
+ total += 1
58
+
59
+ return
60
+
61
+ n = remainder // coins[coin]
62
+
63
+ for i in range(n + 1):
64
+
65
+ coin_sums_i(remainder - i * coins[coin], coin - 1)
66
+
67
+
68
+
69
+ coin_sums_i(remainder, coin)
70
+
71
+ return total
72
+
73
+
74
+
75
+ coins = [2, 5, 10, 20,50, 100, 200]
76
+
77
+ ans = coin_sums2(200, len(coins)-1)
78
+
79
+ print(ans)
80
+
81
+ ```

1

修正

2018/10/12 09:45

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -1,30 +1,32 @@
1
- こん感じでしょうか
1
+ けっきょくtotalは作らくても良さそうでし
2
2
 
3
3
 
4
4
 
5
5
  ```python
6
6
 
7
- def coin_sums2(remainder, coin, t, total=0):
7
+ def coin_sums2(remainder, coin):
8
8
 
9
9
  if coin < 0:
10
10
 
11
- return total + 1
11
+ return 1
12
12
 
13
- n = remainder // coins[coin]
13
+ else:
14
14
 
15
+ n = remainder // coins[coin]
15
16
 
17
+ results = []
16
18
 
17
- for i in range(n + 1):
19
+ for i in range(n + 1):
18
20
 
19
- total += coin_sums2(remainder - i * coins[coin], coin - 1, total)
21
+ results.append(coin_sums2(remainder - i * coins[coin], coin - 1))
20
22
 
21
- return total
23
+ return sum(results)
22
24
 
23
25
 
24
26
 
25
27
  coins = [2, 5, 10, 20,50, 100, 200]
26
28
 
27
- ans = coin_sums2(200, len(coins)-1, 0)
29
+ ans = coin_sums2(200, len(coins)-1)
28
30
 
29
31
  print(ans)
30
32