Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod)
- {
- if (n == 1)
- {
- printf("n Move disk 1 from rod %c to rod %c", from_rod, to_rod);
- return;
- }
- towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
- printf("n Move disk %d from rod %c to rod %c", n, from_rod, to_rod);
- towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
- }
- int main()
- {
- int n = 4; // Number of disks
- towerOfHanoi(n, 'A', 'C', 'B'); // A, B and C are names of rods
- return 0;
- }
- .globl main
- main:
- addi $sp, $sp, -4
- sw $ra, 0($sp)
- li $v0, 5 # system call code for read_int
- syscall
- move $a0, $v0 # a0 holds the number of disks
- li $a1, 'A' # a1 holds from_rod
- li $a2, 'C' # a2 holds to_rod
- li $a3, 'B' # a3 holds aux_rod
- jal hanoi
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- li $v0, 10
- syscall
- hanoi:
- addi $sp, $sp, -4
- sw $ra, 0($sp)
- beq $a0, 1, base_case
- addi $a0, $a0, -1 # number_of_disks -= 1
- # swap between to_rod and aux_rod :
- move $t0, $a2 # temp = to_rod
- move $a2, $a3 # to_rod = aux_rod
- move $a3, $t0 # aux_rod = temp
- jal hanoi
- jal print
- # swap between from_rod and aux_rod :
- move $t0, $a1 # temp = from_rod
- move $a1, $a3 # from_rod = aux_rod
- move $a3, $t0 # aux_rod = temp
- jal hanoi
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- jr $ra
- base_case:
- addi $sp, $sp, -4
- sw $ra, 0($sp)
- jal print
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- jr $ra
- print:
- addi $sp, $sp, -4
- sw $ra, 0($sp)
- move $t0, $a0
- li $v0, 11
- move $a0, $a1
- syscall # print from_rod
- li $a0, '>'
- syscall # print the char '>'
- move $a0, $a2
- syscall # print to_rod
- li $a0, 'n'
- syscall # pirnt new line
- move $a0, $t0
- lw $ra, 0($sp)
- addi $sp, $sp, 4
- jr $ra
Add Comment
Please, Sign In to add comment