Bird
Raised Fist0
Kotlinprogramming~5 mins

Generating infinite sequences in Kotlin

Choose your learning style10 modes available
Introduction

Generating infinite sequences lets you create endless lists of values without using too much memory. You can get values one by one as you need them.

When you want to create a list of numbers that never ends, like all natural numbers.
When you need to process data step-by-step without loading everything at once.
When you want to generate repeated patterns or calculations lazily.
When you want to handle streams of data that keep coming, like sensor readings.
When you want to save memory by not storing all values at once.
Syntax
Kotlin
val sequence = generateSequence(seed) { nextValue -> nextValue + 1 }

seed is the first value of the sequence.

The lambda after seed defines how to get the next value from the current one.

Examples
This creates an infinite sequence of numbers starting from 1, increasing by 1 each time.
Kotlin
val numbers = generateSequence(1) { it + 1 }
This creates an infinite sequence of even numbers starting from 0.
Kotlin
val evenNumbers = generateSequence(0) { it + 2 }
This creates an infinite Fibonacci sequence by generating pairs and mapping to the first number.
Kotlin
val fibonacci = generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }.map { it.first }
Sample Program

This program creates an infinite sequence of numbers starting at 1. It then takes the first five numbers and prints them as a list.

Kotlin
fun main() {
    val numbers = generateSequence(1) { it + 1 }
    val firstFive = numbers.take(5).toList()
    println("First five numbers: $firstFive")
}
OutputSuccess
Important Notes

Infinite sequences do not store all values, so they save memory.

Use functions like take() to get a limited number of items; otherwise, the program may run forever.

You can transform sequences with map, filter, and other sequence functions.

Summary

Infinite sequences generate values one by one as needed.

They start from a seed and use a function to get the next value.

Always limit infinite sequences when using them to avoid endless loops.

Practice

(1/5)
1. What does an infinite sequence in Kotlin do?
sequence { yield(1); yieldAll(generateSequence(2) { it + 1 }) }
easy
A. Generates only the first two numbers and stops
B. Creates a fixed list of numbers from 1 to 10
C. Generates values endlessly, one at a time, starting from 1
D. Throws an error because sequences can't be infinite

Solution

  1. Step 1: Understand sequence behavior

    The sequence starts by yielding 1, then continues with an infinite sequence starting at 2, increasing by 1 each time.
  2. Step 2: Recognize infinite generation

    Since generateSequence with a lambda that adds 1 never returns null, it produces values endlessly.
  3. Final Answer:

    Generates values endlessly, one at a time, starting from 1 -> Option C
  4. Quick Check:

    Infinite sequence = endless values [OK]
Hint: Infinite sequences produce values one by one without stopping [OK]
Common Mistakes:
  • Thinking infinite sequences create fixed lists
  • Assuming infinite sequences cause errors immediately
  • Believing sequences stop after a few values
2. Which of the following is the correct syntax to create an infinite sequence of even numbers starting from 0 in Kotlin?
easy
A. sequence { yield(0); yield(2); yield(4) }
B. sequenceOf(0, 2, 4, 6)
C. generateSequence(0, 2)
D. generateSequence(0) { it + 2 }

Solution

  1. Step 1: Identify infinite sequence syntax

    generateSequence(seed) { nextValue } creates an infinite sequence by applying the lambda repeatedly.
  2. Step 2: Check each option

    generateSequence(0) { it + 2 } correctly uses generateSequence(0) { it + 2 } to produce even numbers endlessly. Options B and D create finite sequences. generateSequence(0, 2) has incorrect syntax.
  3. Final Answer:

    generateSequence(0) { it + 2 } -> Option D
  4. Quick Check:

    Correct syntax = generateSequence(0) { it + 2 } [OK]
Hint: Use generateSequence(seed) { next } for infinite sequences [OK]
Common Mistakes:
  • Using sequenceOf for infinite sequences
  • Passing two arguments to generateSequence incorrectly
  • Not providing a lambda for next values
3. What will be the output of this Kotlin code?
val seq = generateSequence(1) { it + 3 }
println(seq.take(4).toList())
medium
A. [1, 2, 3, 4]
B. [1, 4, 7, 10]
C. [1, 3, 6, 9]
D. [4, 7, 10, 13]

Solution

  1. Step 1: Understand sequence generation

    The sequence starts at 1, then each next value adds 3: 1, 4, 7, 10, ...
  2. Step 2: Apply take and toList

    take(4) takes first 4 values: 1, 4, 7, 10. toList() converts them to a list.
  3. Final Answer:

    [1, 4, 7, 10] -> Option B
  4. Quick Check:

    Sequence values = [1,4,7,10] [OK]
Hint: Add the step value repeatedly starting from seed [OK]
Common Mistakes:
  • Adding 1 instead of 3 each step
  • Confusing take with drop
  • Expecting a finite sequence without take
4. Identify the error in this Kotlin code that tries to generate an infinite sequence of odd numbers:
val odds = generateSequence(1) { it + 2 }
println(odds.take(5).toList())
medium
A. No error; code runs correctly and prints odd numbers
B. Missing yield keyword inside generateSequence
C. The lambda should return null to stop sequence
D. Seed value should be 0 instead of 1

Solution

  1. Step 1: Check generateSequence usage

    The code uses generateSequence(1) { it + 2 }, which correctly generates odd numbers starting at 1.
  2. Step 2: Verify output and syntax

    take(5).toList() safely takes first 5 odd numbers. No syntax or runtime error exists.
  3. Final Answer:

    No error; code runs correctly and prints odd numbers -> Option A
  4. Quick Check:

    Correct infinite sequence = No error; code runs correctly and prints odd numbers [OK]
Hint: generateSequence needs only seed and next lambda, no yield [OK]
Common Mistakes:
  • Thinking yield is needed inside generateSequence
  • Expecting lambda to return null to continue
  • Confusing seed value for even numbers
5. You want to generate an infinite sequence of Fibonacci numbers in Kotlin. Which code correctly creates this infinite sequence?
hard
A. Both A and B
B. sequence { var a=0; var b=1; while(true) { yield(a); val c=a+b; a=b; b=c } }
C. generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }.map { it.first }
D. generateSequence(0) { it + it }

Solution

  1. Step 1: Analyze generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }.map { it.first }

    generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }.map { it.first } uses generateSequence with pairs to generate Fibonacci pairs, then maps to first element, correctly producing Fibonacci numbers infinitely.
  2. Step 2: Analyze sequence { var a=0; var b=1; while(true) { yield(a); val c=a+b; a=b; b=c } }

    sequence { var a=0; var b=1; while(true) { yield(a); val c=a+b; a=b; b=c } } uses a sequence builder with a while(true) loop yielding Fibonacci numbers step-by-step, also correct and infinite.
  3. Step 3: Analyze generateSequence(0) { it + it }

    generateSequence(0) { it + it } doubles the number each time, not Fibonacci, so it's incorrect.
  4. Final Answer:

    Both A and B -> Option A
  5. Quick Check:

    Both methods generate Fibonacci infinite sequences [OK]
Hint: Use pairs or sequence builder with yield for Fibonacci [OK]
Common Mistakes:
  • Using generateSequence without pairs for Fibonacci
  • Trying to double numbers instead of summing previous two
  • Not using yield in sequence builder for infinite values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard