Write a script to generate first 50 members of FUSC Sequence.
The sequence defined as below:
fusc(0) = 0
fusc(1) = 1
for n > 1:
when n is even: fusc(n) = fusc(n / 2),
when n is odd: fusc(n) = fusc((n-1)/2) + fusc((n+1)/2)
#!/usr/bin/env tclsh
#
# Write a script to generate first 50 members of FUSC Sequence.
# fusc(0) = 0
# fusc(1) = 1
# for n > 1:
# when n is even: fusc(n) = fusc(n / 2),
# when n is odd: fusc(n) = fusc((n-1)/2) + fusc((n+1)/2)
#
proc fusc {n} {
if {$n == 0} {
return 0
} elseif {$n == 1} {
return 1
} elseif {$n > 1} {
set checkn [tcl::mathop::% $n 2]
if {$checkn==0} {
return [fusc [tcl::mathop::/ $n 2]]
} else {
set subn [tcl::mathop::- $n 1]
set addn [tcl::mathop::+ $n 1]
return [tcl::mathop::+ [fusc [tcl::mathop::/ $subn 2]] [fusc [tcl::mathop::/ $addn 2]]]
}
} else {
return -code error "Invalid input"
}
}
set results [list]
for {set i 0} {$i < 50} {incr i} {
lappend results [fusc $i]
}
set r [join $results ", "]
puts $r
沒有留言:
張貼留言