2016-11-24 6 views
1

나는이 작업을 시도하지 못했습니다 ... 아무도 도와 줄 수 있습니까? 논리 실수 또는 구문을 알고 싶습니다. 미리 감사드립니다.tcl fibonacci series in recursive

return [expr fibb [expr $size - 1] + fibb [expr $size - 2]] 

사실, 즉있어 몇 가지 문제 :

#********************************************* 

puts "Fibbonocci sequence" 

proc fibb {size} { 
     if { $size == 1 || $size ==0 } { 
       return $size 
     } else { 
       return [expr fibb [expr $size - 1] + fibb [expr $size - 2]] 
     } 

} 
puts "Enter the length of the series:" 

set n [gets stdin] 

puts "Fibbonocci sequence upto $n terms are:" 
puts [fibb $n] 


#********************************************** 

답변

4

문제는이 라인입니다.

return [expr { [fibb [expr { $size - 1 }]] + [fibb [expr { $size - 2 }]] }] 
:

return [expr { fibb [expr { $size - 1 }] + fibb [expr { $size - 2 }] }] 

두 번째 문제는, 그 외부 표현 내에서의 Tcl 명령으로 fibb 전화 ]이 필요한 더 [ 괄호 있도록해야한다는 것입니다 : 첫 번째는 표현이 보강되지 않은 것입니다

정확한 위치에 플러그를 꽂아 코드의 나머지 부분을 작동시켜야합니다 ... 그러나 우리는 기능에 fibb을 돌려서 그보다 더 우아 할 수 있습니다. Tcl의 함수는 실제로 오른쪽 네임 스페이스 인 tcl::mathfunc에있는 명령입니다.

proc tcl::mathfunc::fibb {size} { 
    if { $size == 1 || $size ==0 } { 
     return $size 
    } 
    return [expr { fibb($size-1) + fibb($size-2) }] 
} 

그런 다음 사용하여 호출은 말한다 :

puts [expr { fibb($n) }] 

차이는 우리가 (즉, 절차) 올바른 네임 스페이스가가로 동작하도록 명령을 넣어 한 것입니다 표현 구성 요소. 그리고 우리는 표현식 (여전히 중요한 이유를 이해할 때까지 항상하시기 바랍니다) 주위에 중괄호를 넣고 코드를 아주 단순화했습니다.

또한, 당신은 여전히 ​​직접 호출 할 수 있습니다 : 그냥 같은 방식으로 작동합니다

puts [tcl::mathfunc::fibb $n] 

합니다.