2017-04-02 1 views
1

나는 약 피연산자와 연산자, 세트/A,이 웹 사이트에서 SETLOCAL EnableDelayedExpansion을 연구했지만 여전히 어떻게 든 내 코드 내 피연산자가없는 저를 이야기 끝납니다.이 피보나치 배치 리스터를 수정하는 방법은 무엇입니까?

@echo off 
cls 
setlocal EnableDelayedExpansion 
color 0a 
title Fibonacci Lister 
:Fibonacci 
cls 
set /a n1=1 
echo %n1% 
set /a n2=1 
echo %n2% 
set /a j=3 
:loopfunction 
set /a n%j%=!n%j-1%!+!n%j-2%! 
echo !n%j%! 
set /a j=%j%+1 
goto :loopfunction 

그래서 나는이 문제가 무엇인지 알고 싶었습니다. 아마도 코드가 복잡하고 쉽게 이해하기가 쉽지 않은 12 행의 일 것입니다.

답변

1

온라인 #14에서 선언되지 않은 %j-1%%j-2%이라는 변수를 사용하고있었습니다.

업데이트 스크립트 :

@echo off 
    setlocal EnableDelayedExpansion 
    color 0a 
    title Fibonacci Lister 
:Fibonacci 
    set /a n1=1 
    echo %n1% 
    set /a n2=1 
    echo %n2% 
    set /a j=3 
:loopfunction 
    set /a j1=j-1&set /a j2=j-2 
    set /a n%j%=!n%j1%!+!n%j2%! 
    if "!n%j%!"=="1836311903" goto :EOF 
    echo !n%j%! 
    set /a j=j+1 
goto :loopfunction 
+0

감사합니다, 그것은 실제로 작동! 생성 프로세스를 볼 수있는 시간 프레임까지 지연시키기 위해 18 행과 19 행 사이에 ping localhost> nul을 추가했습니다. – kornkaobat

+0

Oh 이렇게하면 더 높은 값에 도달 할 때 나타나는 음수 값을 수정합니다. 큰! – kornkaobat

1
@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set n1=0 
    set n2=1 
:loop 
    echo %n2% 
    set /a "n2=n1+n2" & set "n1=%n2%" 
    if %n2% gtr 0 goto loop 
+0

가능한 한 더 합리적인 방법으로 내 코드를 단순화하는 새로운 아이디어로 이끌어 낼 수있는 답변을 얻었지만 게시 한 원본 코드를 수정하지 못하여 최대 투표 수만 제공 할 수는 있지만 그렇지 않았습니다. 내 권리가 부여 된 문제를 해결하십시오. 죄송합니다. – kornkaobat

+4

@ kornkaobat, 나는 Sam Denty의 답이 문제를 해결하는 것을 보았습니다. 그래서 같은 방법으로 문제를 해결할 이유가 없습니다. 나의 유일한 의도는이 질문을 찾는 누군가가 유용하다고 생각할 수있는 경우에 대비하여 작업을 해결하는 대안적인 방법을 포함시키는 것이 었습니다. –

+0

오, 그럼. 따라서 복제 된 질문이 적고 독자가 더 많은 종류의 답변을 찾아 문제를 해결할 수 있습니다. 명확히 해 주셔서 감사합니다! – kornkaobat

관련 문제