バカの壁 再帰の挙動が追えません!
プログラミングを楽しみたいと思ったら、多少の努力は必要だ。もう、再帰から逃げちゃだめだと思うようにした。とりあえづ
- 階乗
- フィボナッチ
- ハノイの塔
をPythonですらすらかけるようにがんばる。
階乗
# coding:utf-8 import sys def Kaijo(num): if num == 0: return 1 else: return Kaijo(num -1) * num if __name__ == '__main__': if len(sys.argv) > 1: if sys.argv[1].isdigit(): k = int(sys.argv[1]) sys.setrecursionlimit(k + 2) print Kaijo(k) else: print 'number please' else: print 'number please'
まだなれない、言われたとおりのやり方をやってるだけな気がする。再帰の深さを変える事が出来ると知った。なにかに2階層分取られてる。
フィボナッチ
# coding:utf-8 import sys cnt = 0 def fibo(n): global cnt if n < 1: cnt += 1 return fibo(n-1) + n if __name__ == '__main__': n = int(sys.argv[1]) print fibo(n) print cnt
なんか、再帰の書き方を覚えると言うよりも、ルールを数式に起こすところに第一の壁があり、数式をコードに落とすのに第二の壁がある。第二の壁の方が第一の壁より二倍くらい高い気がする。