官术网_书友最值得收藏!

functions

Functions can be nested, as demonstrated in the following example:

function a(x) 
    z = x * 2 
    function b(z) 
        z += 1 
    end 
    b(z) 
end 
 
d = 5 
a(d) #=> 11 

A function can also be recursive, that is, it can call itself. To show some examples, we need to be able to test a condition in code. The simplest way to do this in Julia is to use the ternary operator ? of the form expr ? b : c (ternary because it takes three arguments). Julia also has a normal if construct. (Refer to the Conditional evaluation section of Chapter 4, Control Flow.) expr is a condition and, if it is true, then b is evaluated and the value is returned, else c is evaluated. This is used in the following recursive definition to calculate the sum of all the integers up to and including a certain number:

sum(n) =  n > 1 ? sum(n-1) + n : n 

The recursion ends because there is a base case: when n is 1, this value is returned. Here is the famous function to calculate the nth Fibonacci number that is defined as the sum of the two previous Fibonacci numbers:

fib(n) = n < 2 ? n : fib(n-1) + fib(n-2)

When using recursion, care should be taken to define a base case to stop the calculation. Also, although Julia can nest very deeply, watch out for stack overflows, because, until now, Julia has not done tail call optimization automatically.

主站蜘蛛池模板: 横峰县| 固安县| 乐安县| 新安县| 霞浦县| 任丘市| 长寿区| 定远县| 米泉市| 临澧县| 三门县| 麻城市| 梨树县| 皋兰县| 敖汉旗| 肥城市| 万州区| 永登县| 旺苍县| 龙胜| 怀柔区| 乌拉特后旗| 安岳县| 永善县| 吴忠市| 渭源县| 新密市| 济阳县| 宁夏| 西乌珠穆沁旗| 皋兰县| 阿勒泰市| 克拉玛依市| 苍溪县| 松溪县| 怀仁县| 镇远县| 方城县| 泗洪县| 绥阳县| 临湘市|