Skip to content

Wrong solution to exercise 4.1 #22

Open
@sharubhat

Description

@sharubhat

The solution to add two numbers is incorrect and works purely by accident only because types of both inputs are Int. If one of them is changed to Long, the answers would be incorrect. Also very simple addition like add(3, -3) will result in a stackoverflow if the function is not marked tailrec because it takes 2^32 - 3 iterations to get b from -3 to 0.

Provided solution is tailrec fun add(x: Int, y: Int): Int = if (y == 0) x else add(inc(x), dec(y)).
The correct solution would be

tailrec fun add(a: Int, b: Int): Int =
    when {
        (b == 0) -> a
        (b > 0) -> add(inc(a), dec(b))
        else -> add(dec(a), inc(b))
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions