2014-07-01 103 views
1

我想在Python 2.7中實現一個二分法函數。我非常難以理解爲什麼我的代碼沒有返回包含在我的測試中的根。函數不返回值(Python 2.7)

當我在代碼中打印語句時,很明顯算法找到了根,但是我一定在實際語法中遺漏了一些基本的東西(我是python的一個完整的newby)。

代碼是在這裏:

def bisection(a,b,fun,tol): 
    c = (a+b)/2.0 
    if (b-a)/2.0 <= tol: 
     #Debugging print statement 1: 
     #print 'SOL1: c = ', c 
     return c 

    if fun(c) == 0: 
     #Debugging print statement 2: 
     #print 'SOL2: c = ', c 
     return c 

    elif fun(a)*fun(c) < 0: 
     b = c 
    else: 
     a = c 
    print 'a =', a 
    print 'b =', b 
    bisection(a, b, fun, tol) 

def tstr(x): 
    return 2*(x**2) - 3*x + 1 

sol = bisection(0, 0.9, tstr, 0.01) 

回答

4

你忽略在最後的遞歸調用;你需要顯式地返回它的返回值:

return bisection(a, b, fun, tol) 

不使用return在這裏是指遞歸調用的返回值只是忽略,並沒有明確的return stamenent的調用函數結束,因此返回None

隨着這一變化,sol實際上是設置:

>>> sol = bisection(0, 0.9, tstr, 0.01) 
a = 0.45 
b = 0.9 
a = 0.45 
b = 0.675 
a = 0.45 
b = 0.5625 
a = 0.45 
b = 0.50625 
a = 0.478125 
b = 0.50625 
a = 0.4921875 
b = 0.50625 
>>> sol 
0.49921875 
+0

唉唉,精彩紛呈。謝啦。 – Aidenhjj